Περιεχόμενα
Ετοίμασε το κλειδί και επιβεβαίωσε τον server
Οι τοπικές εντολές εκτελούνται σε Bash σε Linux, macOS ή WSL. Δημιούργησε το κλειδί πριν παραγγείλεις τη νέα VM. Αν το αρχείο υπάρχει ήδη, χρησιμοποίησε άλλο όνομα σε όλα τα βήματα και πρόσθεσε συνθηματικό.
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pubΔώσε μόνο το δημόσιο .pub στο πεδίο SSH της νέας μηχανής. Το παράδειγμα χρησιμοποιεί αρχικό χρήστη ubuntu και θύρα 22· έλεγξε τις τιμές του παρόχου. Από την αξιόπιστη κονσόλα ανάκτησης διάβασε το fingerprint του host key:
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubΣτον υπολογιστή σου αντικατάστησε την 203.0.113.10 με την πραγματική διεύθυνση. Πριν αποδεχθείς το κλειδί, σύγκρινε αλγόριθμο και SHA256 με την κονσόλα.
ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10Από άλλο τοπικό τερματικό ανέβασε το δημόσιο κλειδί για τον ξεχωριστό διαχειριστή που θα δημιουργήσεις:
scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pubΚράτησε διαθέσιμη την αρχική πρόσβαση και την κονσόλα. Η δημόσια διεύθυνση και το app.example.com που ακολουθεί είναι παραδείγματα τεκμηρίωσης, όχι τιμές για αντιγραφή χωρίς αλλαγή.
Δημιούργησε διαχειριστή και δοκίμασε νέα συνεδρία
Στον server έλεγξε πρώτα getent passwd deploy. Αν υπάρχει ήδη ο χρήστης, επίλεξε αχρησιμοποίητο όνομα και άλλαξε παντού ομάδα και home directory. Μην αντικαταστήσεις το αρχείο κλειδιών κάποιου υπάρχοντος χρήστη.
Επιβεβαίωσε σύστημα και πόρους, διάβασε τις αναβαθμίσεις και δημιούργησε τον λογαριασμό. Βάλε ισχυρό κωδικό για τα αιτήματα sudo.
cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keysΑπό νέο τερματικό στον υπολογιστή σου μπες ως ο νέος χρήστης:
ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10Μέσα στη νέα συνεδρία του server έλεγξε sudo. Η εντολή πρέπει να επιστρέψει root αφού δεχτεί τον κωδικό του deploy:
sudo whoamiΣυνέχισε από αυτή τη συνεδρία μόνο όταν λειτουργούν και οι δύο έλεγχοι. Μην απενεργοποιήσεις προηγούμενο τρόπο εισόδου πριν επιβεβαιώσεις τον αντικαταστάτη του.
Εγκατάστησε Nginx με το κατάλληλο firewall
Στον νέο server, αφού ολοκληρωθεί η αρχικοποίηση, εγκατέστησε και έλεγξε το Nginx:
sudo apt install nginx
sudo systemctl enable --now nginxΣτο firewall του παρόχου επέτρεψε την πραγματική θύρα SSH από τη θέση διαχείρισής σου και TCP 80/443 για επισκέπτες. Το firewall του guest αποτελεί ξεχωριστό επίπεδο· οι κανόνες του δικτύου δεν το παρακάμπτουν.
Εικόνες Ubuntu στο Oracle Cloud: παράλειψε ολόκληρο το παρακάτω block UFW. Μπορεί να επηρεάσει ουσιώδεις κανόνες της εικόνας, μαζί με το iSCSI για boot και block volumes. Διατήρησε τους υπάρχοντες κανόνες και χρησιμοποίησε την τεκμηριωμένη ρύθμιση OCI και guest για HTTP/HTTPS. Μην αδειάσεις τα iptables και μην αντικαταστήσεις τα πακέτα firewall.
Άλλες νέες εικόνες: χρησιμοποίησε αυτό το block μόνο όταν ο πάροχος υποστηρίζει UFW. Επέτρεψε πρώτα την πραγματική θύρα SSH· εδώ είναι η 22.
sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseΜετά από οποιαδήποτε διαδρομή, δοκίμασε νέα είσοδο SSH. Η παλιά συνεδρία δεν ελέγχει τη δυνατότητα νέας σύνδεσης. Διατήρησε την κονσόλα και την προηγούμενη πρόσβαση όσο εξετάζεις ένα πρόβλημα.
Δημοσίευσε τη σελίδα σε ξεχωριστό Nginx site
Οι διαδρομές και το όνομα first-site πρέπει να είναι διαθέσιμα στον νέο server. Αντικατάστησε το app.example.com με το hostname σου. Κράτησε τα εισαγωγικά γύρω από το EOF ώστε το shell να μη μεταβάλει τις μεταβλητές Nginx, όπως το $uri.
sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="en"><title>First deployment</title><h1>Ubuntu VPS is serving this page</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
listen 80;
listen [::]:80;
server_name app.example.com;
root /var/www/first-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -tΚάνε reload μόνο αν το nginx -t πετύχει:
sudo systemctl reload nginxΣτον υπολογιστή σου έλεγξε το hostname πάνω στην IP του server πριν αλλάξεις DNS. Αντικατάστησε και τα δύο στοιχεία:
curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/Περίμενε τον τίτλο της δικής σου σελίδας. Ένα HTTP 200 με την προεπιλεγμένη σελίδα Nginx δεν επιβεβαιώνει το σωστό site.
Σύνδεσε DNS και πιστοποιητικό HTTPS
Η διαδικασία υποθέτει DNS απευθείας στη VM, χωρίς proxy. Το A record δείχνει στη δημόσια IPv4. Πρόσθεσε AAAA μόνο αν η IPv6 λειτουργεί και εξυπηρετεί το ίδιο site· μια παλιά διεύθυνση μπορεί να οδηγήσει αλλού επισκέπτες και έλεγχο πιστοποιητικού.
Από τον υπολογιστή σου ζήτησε το http://app.example.com/ με το δικό σου όνομα και χωρίς --resolve. Όταν εμφανιστεί η σωστή σελίδα, εγκατέστησε στον server την έκδοση Certbot και το plugin Nginx από τα αποθετήρια Ubuntu. Χρειάζεται Universe· διόρθωσε τυχόν έλλειψη πακέτου πριν συνεχίσεις.
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timerΑκολούθησε τα αιτήματα email και αποδοχής όρων. Το Certbot αλλάζει το site και προσθέτει ανακατεύθυνση HTTP προς HTTPS. Έλεγξε τη δοκιμή ανανέωσης και το certbot.timer. Αν ο timer είναι ανενεργός, εξέτασε την αιτία και ενεργοποίησέ τον με sudo systemctl enable --now certbot.timer. Η θύρα 80 πρέπει να παραμένει προσβάσιμη για ανανέωση μέσω HTTP.
Έλεγξε εξωτερικά και μετά από επανεκκίνηση
Από τον υπολογιστή σου έλεγξε ανακατεύθυνση, πιστοποιητικό και περιεχόμενο. Μην προσθέσεις curl -k, γιατί κρύβει σφάλματα επαλήθευσης πιστοποιητικού.
curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/Το HTTP πρέπει να ανακατευθύνει σε HTTPS και εκεί να εμφανίζεται η δική σου σελίδα με έγκυρο πιστοποιητικό. Αν δημοσιεύεις IPv6, έλεγξε και αυτή τη διαδρομή.
Όσο ο server είναι ακόμη δοκιμαστικός, εκτέλεσε sudo reboot. Μπες ξανά ως deploy, έλεγξε systemctl is-active nginx και επανάλαβε το εξωτερικό αίτημα. Η επανεκκίνηση διακόπτει σκόπιμα το SSH· χρησιμοποίησε κονσόλα αν η VM δεν επανέλθει.
Κράτησε ανακτήσιμη τη λειτουργική εγκατάσταση
Σε μικρή οθόνη, σύρε τον πίνακα οριζόντια για να δεις όλες τις στήλες.
| Σύμπτωμα | Πρώτος έλεγχος |
|---|---|
| SSH timeout | Διεύθυνση, firewalls και κονσόλα |
| Permission denied | Χρήστης, κλειδί και δικαιώματα |
| Προεπιλεγμένη σελίδα Nginx | DNS, server_name και ενεργό site |
| Αποτυχία πιστοποιητικού | Δημόσια A/AAAA και πρόσβαση στη θύρα 80 |
| Nginx δεν ξεκινά | nginx -t και journal υπηρεσίας |
Για αποτυχία πρόσβασης ακολούθησε τη διάγνωση με το ακριβές μήνυμα SSH. Φύλαξε αρχεία, ρυθμίσεις DNS και βήματα επαναδημιουργίας εκτός VPS. Κάνε ξεχωριστή δοκιμή επαναφοράς και βάλε ειδοποιήσεις διαθεσιμότητας, αποτυχίας backup και λήξης πιστοποιητικού.
Αυτό είναι στατικό site. WordPress, Node.js και βάση δεδομένων χρειάζονται δική τους διαμόρφωση, έλεγχο συμβατότητας και συνεπή ανάκτηση δεδομένων. Σε μεταφορά υπάρχοντος site, σχεδίασε τελικό συγχρονισμό, email, uploads και προγραμματισμένες εργασίες, κρατώντας την παλιά υπηρεσία μέχρι να ελεγχθεί η νέα.
Για νέο Ubuntu 24.04, απευθείας DNS και SSH στη θύρα 22 του παραδείγματος. Σε OCI Ubuntu παραλείπεται το UFW. Η διαδικασία βασίζεται σε τεκμηρίωση και δεν δηλώνεται δοκιμασμένη σε κάθε εικόνα παρόχου.
Συχνές ερωτήσεις
Μπορώ να το εφαρμόσω σε site που ήδη λειτουργεί;
Δοκίμασέ το πρώτα σε άλλη VM. Οι εντολές δημιουργούν αρχεία, μπορεί να ενεργοποιούν firewall και αφήνουν το Certbot να αλλάξει το Nginx. Μια υπάρχουσα εγκατάσταση θέλει έλεγχο της κατάστασής της.
Εγκαθίσταται και βάση δεδομένων;
Όχι, το παράδειγμα δημοσιεύει στατικά αρχεία με HTTPS. Πρόσθεσε runtime και βάση ξεχωριστά, μαζί με έλεγχο εκκίνησης, λειτουργίας και ανάκτησης.
Αρκεί ένα επιτυχημένο HTTPS αίτημα;
Επιβεβαιώνει εκείνη τη διαδρομή εκείνη τη στιγμή. Δεν αντικαθιστά παρακολούθηση, ενημερώσεις, δοκιμή επαναφοράς ή έλεγχο της αυριανής ανανέωσης.