Установка Debian сервера: Nginx, Python, PostgreSQL, PHP
Эта статья нужна мне самому, чтобы не забывать что нужно поставить и вообще что делать.
Ниже простой список команд после того как вы попали в root
Обновление пакетов
apt update
apt upgrade
Установка пакетов
apt install zsh git wget curl tmux sudo python3 nginx htop sudo nginx apt install python3-pip apt install postgresql postgresql-contrib apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface apt install python3-certbot-nginx apt install libpq-dev python3-dev
Включение Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" chsh -s /bin/zsh
Чтобы поменять тему - открыть файл ~/.zshrc, и в поле ZSH_THEME заменить значение. Другие темы тут
ZSH_THEME="agnoster"
Включение сервисов автоматически после перезапуска
sudo systemctl enable nginx sudo systemctl enable postgresql
Установка основных PIP пакетов
У меня их достаточно много, у меня на все репозитории одинаковые так что как-то так
python3 -m pip install psycopg2 flask flask_cors flask_restful marshmallow PyYAML urllib3 requests peewee backoff setproctitle flask_restful hashlib
Добавление пользователя и переход к нему
adduser daniilak usermod -aG sudo daniilak su - daniilak
Генерация ssh-ключа
ssh-keygen -t ed25519 cat /home/daniilak/.ssh/id_rsa.pub
Настройка PostgreSQL
sudo passwd postgres usermod -aG sudo postgres su - postgres sudo -u postgres psql -c "SELECT version();" sudo su - postgres -c "createuser daniilak" sudo su - postgres -c "createdb daniilak" sudo nano /etc/postgresql/13/main/postgresql.conf
Чтобы узнать как настраивать параметры - можно глянуть в PG Tune
sudo nano /etc/postgresql/13/main/pg_hba.conf
Это я сейчас не помню, так что пусть будет так:
# "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
Перезапустить службу
sudo systemctl restart postgresql.service
Настройка NGINX
Нужно зайти в конфиг, который можно переименовать в виде названия домена, но и так норм (нет)
sudo nano /etc/nginx/sites-available/default
Конфиги приведены для flask приложений, которые запускаются как python3 app.py и имеют команду, например
app.run(host='0.0.0.0', port=5001)
Тут два варианта:
- Если есть домен и настроен certbot для let's encrypt и можно настроить https. Не забыть заменить example.ru на свой
server
{
client_max_body_size 100M;
listen [::]:80 default_server ipv6only=on;
listen 80 default_server;
server_name example.ru;
return 301 https://$host:443$request_uri;
}
server
{
client_max_body_size 100M;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
server_name example.ru www.example.ru;
location /path/
{
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /
{
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- Если домена нет, то придется обойтись http
server {
listen 80 default_server;
client_max_body_size 100M;
listen [::]:80 default_server ipv6only=on;
server_name _;
location /path/ {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Проверить на ошибки кофиг и перезапустить службу
nginx -t nginx -s reload
Настройка ssl на домен
certbot --nginx -d example.ru -d www.example.ru nginx -t nginx -s reload
Вроде бы всё из самого основного