Portfolyomu Laravel 7 kullanarak yapmaya karar verdim. Böylece ana sayfa bir açılış sayfası olacak ve içindeki tüm bilgiler yönetici paneli kullanılarak değiştirilebilecekti. Konu bu değil. Dağıtıma geldi. Tüm sorunlarıyla birlikte tam teşekküllü bir sunucuda bunun nasıl yapılacağına dair birkaç iyi eğitim buldum. Dağıtım konusunda çok güçlü değilim; genellikle tam yığından daha öndeyim. Ve eğer hala PHP'de yazıp test edebiliyorsam, sunucuyu yönetmeden önce vb. Henüz büyümedim. Ama bunu çözmem gerekiyordu.
Şimdi SSH aracılığıyla lansmandan başlayıp çalışma sitesiyle biten tüm adımları izleyeceğiz. Tüm tuzaklardan kaçınmaya çalışacağız.
Benzer talimatları çevrimiçi olarak da bulabilirsiniz. Sonuçta sonunda buldum. Doğru, tek bir yerde, StackOverflow'un yardımı olmadan ve neredeyse hiç Rusça değil. Acı çektim. Bu yüzden hayatınızı basitleştirmeye karar verdim.
DigitalOcean'da her şeyi bir damlacıkla yapacağız. Bu elbette gerekli değil; herhangi bir barındırma seçeneğini seçin. Ubuntu'da çalışan bir sunucuya ulaştığınızda geri gelin. Hala bunu DigitalOcean'da yapmaya karar verenler için alan adı kurulumuna ilişkin daha fazla ipucu olacak. Ve
DigitalOcean'a özgü tüm adımlar bunun gibi dipnotlarda verilecektir.
Başlayalım.
TL;DR (yalnızca temel komutlar)
Kullanıcı oluştur
ssh root@[IP-адрес вашего дроплета]
adduser laravel
usermod -aG sudo laravel
su laravel
Buna SSH ekleyin
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
- Genel anahtarı ekleyin
chmod 600 ~/.ssh/authorized_keys
Güvenlik duvarı
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
nginx
sudo apt update
sudo apt install -y nginx
sudo ufw allow 'Nginx HTTP'
sudo ufw status
MySQL
sudo apt install -y mysql-server
sudo mysql_secure_installation
,NYNNY
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
SELECT user,authentication_string,plugin,host FROM mysql.user;
FLUSH PRIVILEGES;
exit
PHP
-
sudo apt update
-
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
-
sudo apt-add-repository ppa:ondrej/php
-
sudo apt update
-
7.3:
sudo apt install -y php7.3-fpm php7.3-mysql
-
7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
-
sudo vim /etc/nginx/sites-available/<Ваш домен>
Temel kurulum:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name <Ваш домен или IP>;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Laravel için yalnızca HTTP kurulumu:
server {
listen 80;
listen [::]:80;
root /var/www/html/<Имя проекта>/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name <Ваш домен или IP>;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Laravel için HTTPS ayarı:
server {
listen 80;
listen [::]:80;
server_name <Ваш домен> www.<Ваш домен>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <Ваш домен> www.<Ваш домен>;
root /var/www/html/<Имя проекта>/public;
ssl_certificate /etc/letsencrypt/live/<Ваш домен>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<Ваш домен>/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
laravel
-
7.3:
sudo apt install -y php7.3-mbstring php7.3-xml composer unzip
-
7.4:
sudo apt install -y php7.4-mbstring php7.4-xml composer unzip
-
mysql -u root -p
-
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
sudo mkdir -p <Имя проекта>
-
sudo chown laravel:laravel <Имя проекта>
-
cd ./<Имя проекта>
-
git clone <ссылка на проект> .
/git clone -b <имя ветки> --single-branch <ссылка на проект> .
-
composer install
-
vim .env
APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://<Ваш домен>
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=<Ваш пароль от MySQL>
-
php artisan migrate
-
php artisan key:generate
-
sudo chown -R $USER:www-data storage
-
sudo chown -R $USER:www-data bootstrap/cache
-
chmod -R 775 storage
-
chmod -R 775 bootstrap/cache
HTTPS
-
sudo add-apt-repository ppa:certbot/certbot
-
sudo apt install -y python-certbot-nginx
-
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
-
sudo nginx -t
-
sudo ufw allow 'Nginx HTTPS'
-
sudo ufw status
-
sudo systemctl reload nginx
DigitalOcean'da bir damlacık oluşturun ve yeni bir SSH anahtarı kaydedin
DigitalOcean'a nasıl kaydolacağınızı kendi başınıza çözeceğinize gerçekten inanıyorum. Pek çok doğrulama ve diğer şeyler nedeniyle bu kolay değil. Belgeleri kullanarak doğrulama yaparken sürekli bir ağ hatası alıyorsanız, her şeyi bir VPN aracılığıyla yapmayı deneyin, bu yardımcı olacaktır.
Üstteki menüde, oluşturmak->damlacıklar. Seçmek Ubuntu.
Kayıt olduğunuz anda hesabınıza 100$ aktarılacaktır. Ama aldanmayın. Harcamak için yalnızca 60 gününüz var. Ve bu çok az. Siz de benim gibi daha pahalı bir plan kullanmak isteyebilirsiniz, böylece daha sonra gerçek para akmaya başladığında daha ucuz bir plana geçebilirsiniz. Bunun işe yaramayacağını hemen söyleyeceğim. Arttırabilirsiniz ama azaltamazsınız. O zaman o gider. seçerim Standart->$5.
Bize en yakın bölgeyi seçiyorum Frankfurt. VPC Ağı->varsayılan-fra1
Kimlik doğrulamayı hemen SSH üzerinden gerçekleştireceğiz. Tıklamak Yeni SSH Anahtarı. SSH'niz yoksa sağ tarafta çok basit talimatlar var. Bir bash terminali açın ve yapıştırın
ssh-keygen
. Daha sonra ortak anahtarın bulunduğu dosyaya gidiyoruz/Users/<Ваше имя пользователя>/.ssh/id_rsa.pub
(ya da sadececat ~/.ssh/id_rsa.pub
), içeriği kopyalayın ve soldaki pencereye yapıştırın. Herhangi bir isim.Damlacık için bir ana bilgisayar adı buluyoruz.
Tıklayın Damlacık Oluştur
Yeni bir kullanıcı oluştur
ssh root@[IP-адрес вашего дроплета]
- Bağlanmaya devam etmek istediğinizden emin misiniz (evet/hayır/[parmak izi])?
yes
- SSH şifrenizi girin
- Kullanıcı oluştur Laravel:
adduser laravel
- Şifrenizi ve diğer bilgilerinizi girin (Sadece Ad Soyadını giriyorum)
- Kullanıcıyı sudo grubuna ekleyin:
usermod -aG sudo laravel
Yeni kullanıcı için SSH
- Yeni kullanıcıya geçin:
su laravel
Yazının sonuna kadar tüm işlemleri laravel kullanıcısı adına gerçekleştiriyoruz. Bu nedenle, aniden kesintiye uğrarsanız yeniden giriş yapın ve girin su laravel
mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
Dosyayı Vim'de açtık. Eğer hiç aşina değilseniz Nano'da çalışabilirsiniz, hakkınız.
En temel Vim komutları
Vim editörünü makale boyunca kullanabilmek için aşağıdakileri bilmeniz yeterlidir.
- Vim'in farklı modları vardır: Komutları girdiğiniz ve modları ve diğerlerini seçtiğiniz Normal mod.
- Herhangi bir moddan çıkmak ve normal moda dönmek için tuşuna basmanız yeterlidir.
Esc
- Hareket edin: sadece okları kullanabilirsiniz
- Kayıt etmeden çık
<Normal mode>
::q!
- Çık ve kaydet
<Normal mode>
::wq
- Metin giriş moduna geç
<Normal mode>
:i
(İngilizceden. eklemek)
- Genel anahtarımızı giriyoruz (bunu yukarıda yaptık)
- Değişikliklere karşı koruyoruz:
chmod 600 ~/.ssh/authorized_keys
Güvenlik duvarı yükleme
- Mevcut tüm ayarlara bakalım:
sudo ufw app list
- OpenSSH'ye izin verin (aksi takdirde bizi kilitler):
sudo ufw allow OpenSSH
- Güvenlik duvarını başlatalım:
sudo ufw enable
,y
- Kontrol ediyoruz:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Her şey yolunda.
Nginx'i yükleme
Kurulum sırasında bazen "Emin misiniz?" diye sorulacaktır. Cevap y
(peki, yalnızca eminseniz).
sudo apt update
sudo apt install nginx
Güvenlik duvarı ayarlarına Nginx ekleme
sudo ufw app list
sudo ufw allow 'Nginx HTTP'
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
IP'nize gidin. Her şey yolunda giderse aşağıdakileri görmelisiniz.
MySQL'i yükleme
sudo apt install mysql-server
- Otomatik koruma komut dosyası başlatma
sudo mysql_secure_installation
Sorulan soruları cevaplayın. Neyi yanıtlayacağınızı bilmiyorsanız önerilen seçeneklerden bazıları şunlardır:
-
Şifre eklentisini doğrula -
N
-
Anonim kullanıcılar kaldırılsın mı? —
Y
-
Uzaktan root girişine izin verilsin mi? —
N
-
Test veritabanı kaldırılsın ve ona erişim sağlansın mı? —
N
-
Ayrıcalık tabloları şimdi yeniden yüklensin mi? —
Y
-
MySQL'e gidelim:
sudo mysql
-
Erişim yöntemlerine bakalım:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Kök için bir şifre belirleyin:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<Ваш пароль для MySQL>';
-
Erişim yöntemlerine tekrar bakalım:
SELECT user,authentication_string,plugin,host FROM mysql.user;
-
Değişiklikleri uygulayın ve MySQL'den çıkın:
FLUSH PRIVILEGES;
иexit
-
Şimdi MySQL'e giriş yapmak için kullanmanız gerekir
mysql -u root -p
ve şifreyi girin
PHP yükleniyor
Şuradan bir üçüncü taraf deposu kullanalım:
sudo apt update
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https
sudo apt-add-repository ppa:ondrej/php
sudo apt update
Şimdi seçelim. Laravel 7 için PHP 7.3 veya 7.4'ü seçebilirsiniz. Tek fark 3 ve 4 numaralarında olacaktır.
- 7.3:
sudo apt install -y php7.3-fpm php7.3-mysql
- 7.4:
sudo apt install -y php7.4-fpm php7.4-mysql
PHP FastCGI Process Manager (fpm), PHP istekleriyle çalışır. mysql, elbette, MySQL ile çalışmak için.
Artık her şeyi 7.4'te yapacağım.
Nginx'i ayarlama
sudo vim /etc/nginx/sites-available/<Ваш домен>
"<Alanınız>" yerine alan adını girin (örneğin, mysite.ru
) gelecekte kullanmak istediğiniz Henüz bir alan adınız yoksa, bir tane yazın ve alan adınızı seçtiğinizde bu bölümdeki adımları tekrarlayın.
Aşağıdakileri girin:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name <Ваш домен или IP>;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Bunun yerine 7.3 sürümünü seçtiyseniz php7.4-fpm.sock
yazmak php7.4-fpm.sock
.
80 numaralı bağlantı noktasını dinleyin server_name
root isteğine geldiğimizde /var/www/html
indeks dosyasını alın. Eğer sonra server_name
Bir şey var, böyle bir dosya arıyoruz. Eğer bulamazsak 404’ü atıyoruz. Eğer bitiyorsa XNUMX’ü atıyoruz. .php
, hızlıca gözden geçirme fpm
. Eğer varsa .ht
, yasakla (403).
- Şuradan bağlantı oluşturma
sites-available
вsites-enabled
:sudo ln -s /etc/nginx/sites-available/<Ваш домен> /etc/nginx/sites-enabled/
- Bağlantının kaldırılması
default
:sudo unlink /etc/nginx/sites-enabled/default
- Hataların kontrol edilmesi:
sudo nginx -t
- Yeniden başlat:
sudo systemctl reload nginx
İşin kontrol edilmesi:
sudo vim /var/www/html/info.php
- Biz yazarız:
<?php phpinfo();
- Hadi gidelim
<Ваш IP>/info.php
Bunun gibi bir şey görmelisiniz:
Artık bu dosya silinebilir: sudo rm /var/www/html/info.php
Laravel'i yükleyin
-
7.3:
sudo apt install php7.3-mbstring php7.3-xml composer unzip
-
7.4:
sudo apt install php7.4-mbstring php7.4-xml composer unzip
-
MySQL'e gidelim:
mysql -u root -p
-
Adıyla bir veritabanı oluşturun Laravel:
CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Root erişimi sağlıyoruz Laravel:
GRANT ALL ON laravel.* TO 'root'@'localhost' IDENTIFIED BY '<Ваш пароль от MySQL>';
-
FLUSH PRIVILEGES;
-
exit
-
cd /var/www/html
-
Proje için bir klasör oluşturun:
sudo mkdir -p <Имя проекта>
-
Kullanıcıya sağlıyoruz Laravel proje hakları:
sudo chown laravel:laravel <Имя проекта>
Daha sonra projeyi aktarmanız gerekir. Örneğin Github'dan klonlama.
cd ./<Имя проекта>
git clone <ссылка на проект> .
Statik dosyaları kaydetmediyseniz (örneğin, /public
) Github'da, o zaman doğal olarak bunlara sahip olmayacaksınız. Örneğin, bunu çözmek için ayrı bir konu oluşturdum deploy
, buradan zaten klonladım: git clone -b <имя ветки> --single-branch <ссылка на проект> .
.
- Bağımlılıkları yükleme:
composer install
- .env'yi oluşturun:
vim .env
Bunun temel versiyonu şöyle görünür:
APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://<Ваш домен>
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=<Ваш пароль от MySQL>
.env dosyanızı kopyalarsanız, APP_ENV'yi üretimle, APP_DEBUG'ı false ile değiştirin ve MySQL için doğru ayarları girin.
- Veritabanını taşıma:
php artisan migrate
- Kodun oluşturulması:
php artisan key:generate
İzinleri değiştirme:
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Geriye kalan son şey Laravel için Nginx'i yeniden yapılandırmak:
sudo vim /etc/nginx/sites-available/<Ваш домен>
server {
listen 80;
listen [::]:80;
root /var/www/html/<Имя проекта>/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name <Ваш домен или IP>;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Geçen seferki gibi, bunun yerine 7.3 sürümünü seçtiyseniz php7.4-fpm.sock
yazmak php7.4-fpm.sock
.
DigitalOcean'da alan adı kurma
Aslında her şey çok basit. Bir alan adı satın alırsınız (herhangi bir yerden), şu adreste DigitalOcean'a geçersiniz: oluşturmak->Etki alanları/DNS... alanında Alan ekle bu alana girip ekleye tıklıyorsunuz. Daha sonra alan adı ayarlarına ve alana gidin HOST ADI girmek @. Bir proje seçin ve tıklayın Kayıt oluştur.
Şimdi alan adını satın aldığınız siteye gidin, orada “DNS Sunucularını” (veya benzer bir şeyi) bulun ve DigitalOcean sunucularına girin (yanins1.digitalocean.com
,ns2.digitalocean.com
,ns3.digitalocean.com
). Artık bu ayarlar kabul edilene kadar biraz (veya çok) beklemeniz gerekiyor. Hazır!
Tek sorun sitenizin sadece HTTP olarak açılmasıdır. HTTPS'ye sahip olmak için bir sonraki bölüme geçin.
HTTPS'yi ayarlama
Certbot'u yükleyin ve alan adını (biçim) iletin mysite.ru
) ve www ( ile alan adı)www.mysite.ru
).
sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-nginx
sudo certbot certonly --webroot --webroot-path=/var/www/html/<Имя проекта>/public -d <Ваш домен> -d www.<Ваш домен>
Şimdi Nginx'i yeniden yapılandırmanız gerekiyor (değerlerinizi değiştirmeyi unutmayın):
server {
listen 80;
listen [::]:80;
server_name <Ваш домен> www.<Ваш домен>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <Ваш домен> www.<Ваш домен>;
root /var/www/html/<Имя проекта>/public;
ssl_certificate /etc/letsencrypt/live/<Ваш домен>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<Ваш домен>/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
Sanırım PHP 7.3 için nelerin değiştirilmesi gerektiğini zaten anladınız.
Burada aslında her şey basit. Tüm istekleri HTTP'den (port 80) HTTPS'ye (port 443) yönlendiriyoruz. Ve orada her şeyi eskisi gibi yapıyoruz, ancak şifrelemeyle.
Geriye kalan tek şey güvenlik duvarındaki izinleri ayarlamaktır:
sudo nginx -t
sudo ufw app list
sudo ufw allow 'Nginx HTTPS'
sudo ufw status
sudo systemctl reload nginx
Artık her şey olması gerektiği gibi çalışmalı.
[Gelişmiş] Node.js'yi Yükleme
Aniden npm komutlarını doğrudan sunucuda çalıştırmanız gerekirse, Node.js'yi yüklemeniz gerekir.
sudo apt update
sudo apt install -y nodejs npm
nodejs -v
İşte bu aşamada durdum. Prensip olarak sonuçtan memnunum. Belki DigitalOcean'dan Rusya'ya daha yakın ve daha ucuz bir yere geçiş yapacağım. Ancak sitedeki tüm doğrulama turlarından zaten geçtiğim ve her şeyi orada yaptığım için onlara örnek olarak gösterdim. Ek olarak, başlangıç 100$'ı eğitim için mükemmel bir sıçrama tahtasıdır.
PS Yazara özel teşekkürler
PPS Bash komutlarıyla düşünen üst düzey bir mühendisseniz lütfen sert bir şekilde yargılamayın. Bu makaleyi düşük düzeyde bulabilirsiniz, ancak ihtiyacım olduğunda bir tane bulmaktan memnuniyet duyardım. İyileştirme önerileri varsa, ben de buna varım.
Kaynak: habr.com