monter un serveur
en ce moment je fais des sites.
comment ? je vais chez monsieur ovh, j’achète un vps (un serveur avec une adresse ip), un nom de domaine (je rajoute deux a records, www et apex, vers le vps, puis j’enlève les autres) et puis je configure le serveur.
je fais ça comme ça :
premiers pas
on se log :
ssh debian@your_server_ip
et on fait un compte :
sudo apt update && sudo apt upgrade -y
sudo adduser yourusername
sudo usermod -aG sudo yourusername
sécurité
sécurité simple et rapide, seul notre ordi pourra se connecter au vps :
sudo nano /etc/ssh/sshd_config
et on écrit :
PermitRootLogin no
PasswordAuthentication no
AllowUsers yourusername
PubkeyAuthentication yes
AuthenticationMethods publickey
Port XXX
puis, en local :
ssh-keygen -t ed25519
pour créer une clé, qu’on copie :
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh debian@your_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
attention, sur le dossier .ssh du nouvel user, pas sur debian !
on donne les droits :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
puis, en local, sur le fichier config
Host nomdusite
HostName IP
User yourusername
Port XXX
IdentityFile C:\Users\username\.ssh\id_ed25519
ensuite tu pourras “ssh nomdusite” tranquillement.
firewall
petit firewall :
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow your_custom_port/tcp #ssh
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 'Nginx Full'
sudo ufw enable
nginx
on va faire le server web avec nginx et la wsgi avec gunicorn :
sudo apt install python3 python3-pip python3-venv nginx
sudo nano /etc/nginx/sites-available/myflaskapp
la config :
server {
listen 80;
server_name domainname.com www.domainname.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name domainname.com www.domainname.com;
ssl_certificate /etc/letsencrypt/live/domainname.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domainname.com/privkey.pem;
location / {
proxy_pass http://unix:/home/username/domainname/domainname.sock:/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
certbot
on va demander notre cadenas :
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
sudo systemctl status certbot.timer
sudo nginx -t
sudo systemctl restart nginx
gunicorn
sudo apt install python3 python3-pip python3-venv nginx
sudo nano /etc/systemd/system/myflaskapp.service
on écrit le service :
[Unit]
Description=Gunicorn instance to serve yourwebsite
After=network.target
[Service]
User=username
Group=www-data
WorkingDirectory=/home/username/app
Environment="PATH=/home/username/app/venv/bin"
ExecStart=/home/username/app/venv/bin/gunicorn \
--config /home/username/app/conf/gunicorn_config.py \
app:app
[Install]
WantedBy=multi-user.target
puis dans ton dossier dédié dans le dossier user :
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
on écrit la config gunicorn :
loglevel = "info"
errorlog = "/home/username/app/log/error.log"
accesslog = "/home/username/app/log/access.log"
bind = "unix:/home/username/app/app.sock"
workers = 3
user = username
group = "www-data"
timeout = 120
et on lance le service :
sudo systemctl start myflaskapp
sudo systemctl enable myflaskapp
attention aux droits
je me suis fait avoir, www-data doit avoir les droits sur le folder de l’app :
sudo chmod 710 /home/username
et on relance tout :
sudo systemctl restart nginx
sudo systemctl restart service
voilà, normalement ça marche.
ensuite go écrire une app.