VirtualBoxにLinux +サーバー(Nginx + Apache)+ PostgreSQL + PHPをインストールする(Ubuntu Server 16.04.3 LTS)

インターネットでは、このようなやや非標準のサーバーをインストールして構成するためのレシピは1つも見つかりませんでした。 レシピを書くことにしました。



動作原理は次のとおりです。





Nginxは静的データ(ファイル)を提供し、Apacheはダイナミクスに従事しています。

始めましょう。



必要なもの:



Virtualbox

Ubuntu Server 16.04.3 LTSLTS-長時間サポート)

PuTTY



VirtualBoxをインストールする



  1. VirtualBoxインストーラーを実行します。



     VirtualBox.  1
  2. デフォルト設定のままにします。



     VirtualBox.  2



     VirtualBox.  3
  3. インストーラーは一時的にネットワークから切断します。 [はい]をクリックします。



     VirtualBox.  4
  4. インストールを開始します。

     VirtualBox.  5
  5. フィニッシュライン。



     VirtualBox.  6


Ubuntu Server 16.04.3 LTSインストール用にVirtualBoxを準備する



  1. ubuntu-16.04.3-server-amd64.isoイメージをダウンロードします
  2. 仮想マシンを作成します。



    VirtualBox
  3. 名前:default_server

    タイプ:Linux

    バージョン:Ubuntu(64ビット)

    RAM容量:2048 MB

    重要:8 GBのRAMがあり、私の場合は2ギガバイトで十分です。 あなたのものは異なるかもしれません...




    VirtualBox

    ハードドライブサイズ:15 GB

    他のパラメータはデフォルトで残されます。



    VirtualBox

    「作成」をクリックします。

  4. ネットワークをすぐに構成します。



    VirtualBox

    接続タイプをNATからネットワークブリッジに変更します。



    VirtualBox

    将来的には、ポート転送を処理しません。
  5. 車を始動します。



    VirtualBox


Ubuntu Server 16.04.3 LTSをインストールします



  1. Ubuntu Server 16.04.3 LTSイメージのあるブートディスクを選択します。



    VirtualBox
  2. 便利な言語を選択します。ロシア語があります。



     Ubuntu Server 16.04.3 LTS ( 1)

    「Enter」をクリックします。
  3. 「Ubuntuサーバーのインストール」を選択します。



     Ubuntu Server 16.04.3 LTS ( 2)
  4. 国を選択してください。



     Ubuntu Server 16.04.3 LTS ( 3)

    重要:画面下部のプロンプトを読んでください。
  5. キーボードレイアウトを決定しません。これは必要ありません。



     Ubuntu Server 16.04.3 LTS ( 4)
  6. キーボードを使用する国を選択します。



     Ubuntu Server 16.04.3 LTS ( 5)
  7. レイアウトの領域を選択します。



     Ubuntu Server 16.04.3 LTS ( 6)
  8. キーの組み合わせを選択して、言語を切り替えます。 CTRL +

    シフト。



     Ubuntu Server 16.04.3 LTS ( 7)
  9. ネットワーク上で認識されるコンピューターの名前を入力します。



     Ubuntu Server 16.04.3 LTS ( 8)
  10. 管理者の名前を入力します。



     Ubuntu Server 16.04.3 LTS ( 9)
  11. 管理者アカウントの名前を入力します(システムに入るためのログインとして使用されます)。



     Ubuntu Server 16.04.3 LTS ( 10)
  12. 管理者アカウントのパスワードを入力します。



     Ubuntu Server 16.04.3 LTS ( 11)
  13. パスワードを繰り返します。



     Ubuntu Server 16.04.3 LTS ( 12)
  14. どうして..?



     Ubuntu Server 16.04.3 LTS ( 13)
  15. タイムゾーンを選択します。



     Ubuntu Server 16.04.3 LTS ( 14)
  16. システムがディスク全体を自動的に使用するようにします。



     Ubuntu Server 16.04.3 LTS ( 15)
  17. パーティションディスク。デフォルトで選択します。



     Ubuntu Server 16.04.3 LTS ( 16)
  18. 変更をディスクに書き込みます。



     Ubuntu Server 16.04.3 LTS ( 17)
  19. プロキシはありません。フィールドを空のままにして続行します。



     Ubuntu Server 16.04.3 LTS ( 18)
  20. システム自体にセキュリティ更新プログラムをインストールさせます。



     Ubuntu Server 16.04.3 LTS ( 19)
  21. システムと共にインストールされるプログラムのセットを選択します。

    標準セットとOpenSSHサーバーで十分です。



     Ubuntu Server 16.04.3 LTS ( 20)
  22. GRUBをメインとして設定します。



     Ubuntu Server 16.04.3 LTS ( 21)
  23. ほぼ完了です。



     Ubuntu Server 16.04.3 LTS ( 22)

    ドライブからディスクを削除する必要があります。

    デバイス->光学ディスク->ドライブからディスクを削除



    VirtualBox

    続行をクリックします。
  24. Ubuntu Serverがインストールされました。



    Ubuntu Server 16.04.3 LTS

    ログインを入力し、その後にパスワードを入力して、システムに入ります。すべてがOKです。

    車の電源を切ります。

    poweroff



  25. 具体的には、このマシンはそのままにして、クローン作成にのみ使用します。

    車のクローンを作成します。

    名前を入力してください。



    VirtualBox

    続けます。

    完全なクローンを選択します。



    VirtualBox

    クリックして複製します。 クローン作成は2分間続きました。


PuTTYをインストールしてSSH経由でアクセスする



  1. インストールファイルを実行します。



     PuTTY ( 1)
  2. デフォルト設定のままにします。



     PuTTY ( 2)



     PuTTY ( 3)

    「インストール」をクリックします。
  3. フィニッシュライン。



     PuTTY ( 4)


SSHを介したサーバーへの接続



  1. マシンのクローンを実行して、IPアドレスを確認します。

    コマンドを書きましょう:

    ifconfig









    スクリーンショットでは、IPアドレスが書き込まれる場所をマークしました。 私はそれを持っています:192.168.0.103(記事の執筆中に変更できますが、私にとっては192.168.0.101に変更されました)。

    これで、次のように記述してアカウントからログアウトできます。

    exit





  2. PuTTYに移動して、保存されたセッションのIPアドレスと名前を入力します。



    PuTTY

    [保存]をクリックします。

  3. 次に、保存したセッションの名前をダブルクリックします。



    PuTTY

    以下を遵守する必要があります。



    PuTTY

    パスワードの後に​​ログインを入力します。

    SSH接続が正常に構成されました。これで(Nginx + Apache)+ PostgreSQL + PHPの構成を開始できます。



インストールと構成(Nginx + Apache)+ PostgreSQL + PHP



スーパーユーザーモードに切り替えましょう

sudo su





ルートディレクトリに行きましょう

cd /





PostgreSQLリポジトリを追加する

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -







sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'





PHPリポジトリを追加する

add-apt-repository ppa:ondrej/php





更新する

apt-get update





アップグレードしましょう

apt-get upgrade





アップグレードは5分間続きました。

pythonを取得します。後で必要になります

apt-get install python





Apache、PHP、PostgreSQLのインストールを始めましょう

apt-get install apache2 php7.2 php7.2-cli php7.2-curl php7.2-fpm php7.2-pgsql postgresql postgresql-contrib postgresql-server-dev-10 libapache2-mod-rpaf build-essential apache2-dev





デフォルトでは、PostgreSQLにはシングルバイトおよび符号なしの数字がないため、インストールします。

PostgreSQLの拡張機能であるpguint-github.com/petere/pguint

git clone https://github.com/petere/pguint.git /pguint





作成したディレクトリに行きましょう

cd /pguint





次に、この拡張機能をコンパイルする必要があります(ここで、先ほどインストールしたpythonが必要です)。

make







make install





ここで、目的のデータベースのPostgreSQLサーバーに、符号なしの1バイトの数字を使用したい場合、次を送信します。

 CREATE EXTENSION uint;
      
      





ルートディレクトリに戻りましょう

cd /





Nginxをインストールしますが、その前にポート80を占有しないようにApacheを停止します。そうしないと、Nginxはインストールされません。

service apache2 stop





Nginxのインストール

apt-get install nginx





OK、nginxも停止します

service nginx stop





Apacheを構成する

a2dismod mpm_event



a2enmod mpm_worker



a2enmod proxy_fcgi



a2enconf php7.2-fpm






Apacheポートを変更する

nano /etc/apache2/ports.conf





交換

 Listen 80
      
      







 Listen 127.0.0.1:8080
      
      





127.0.0.1-ローカルアドレスでのみApacheにアクセスできることを意味します。

8080-任意の空きポートを配置できます。

利用可能なサイトがあるフォルダーに行きましょう

cd /etc/apache2/sites-available





私たちの側の設定ファイルを作成します

nano domain-name.local.conf





そして、このフォームに持ってきてください:

 <VirtualHost 127.0.0.1:8080> ServerName domain-name.local ServerAlias www.domain-name.local ServerAdmin admin@domain-name.local DocumentRoot /var/www/domain-name.local ErrorLog ${APACHE_LOG_DIR}/domain-name.local_error.log CustomLog ${APACHE_LOG_DIR}/domain-name.local_access.log vhost_combined </VirtualHost>
      
      





/ var / wwwにあるものを見てみましょう

cd /var/www/



ls -F






htmlフォルダー、必要なくなりました。コンテンツと一緒に削除します

rm -R html





サイトに独自のフォルダーを作成します

mkdir domain-name.local/





私たちのサイトのあるフォルダーに行きましょう

cd domain-name.local/





index.pnpドキュメントを作成する

nano index.php





書き込みます:

 <?php phpinfo(); ?>
      
      





これはまだ終了しています。

ルートディレクトリに戻りましょう

cd /





Apacheでは、rpaf 0.6がインストールされており、nginxからポートを送受信しないため、正常に動作しません。 したがって、更新する必要があります。

wget -O rpaf_v0.8.4.tar.gz https://github.com/gnif/mod_rpaf/archive/v0.8.4.tar.gz



gunzip rpaf_v0.8.4.tar.gz



tar xvf rpaf_v0.8.4.tar



cd mod_rpaf-0.8.4/






コンパイルする

make



make install






ルートディレクトリに移動します

cd /





では、Apacheのセットアップを続けましょう。

nano /etc/apache2/apache2.conf





交換

 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
      
      







 LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
      
      





きちんとしたrpaf.conf

nano /etc/apache2/mods-available/rpaf.conf





このフォームに持ってきます:

 <IfModule rpaf_module> RPAF_Enable On RPAF_ProxyIPs 127.0.0.1 ::1 RPAF_SetHostName On RPAF_SetHTTPS On RPAF_SetPort On RPAF_ForbidIfNotProxy Off RPAF_Header X-Forwarded-For </IfModule>
      
      





Apacheでサイトを有効にします。

a2ensite domain-name.local.conf





そして、Apacheを実行します。

service apache2 start





C Apacheが終了しました。

Nginxを構成する

nano /etc/nginx/sites-available/domain-name.local





このビューを表示します:

 server { listen 80; listen [::]:80; root /var/www/domain-name.local; index index.php index.html index.htm; server_name domain-name.local www.domain-name.local; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; 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; proxy_pass_header Set-Cookie; } location ~ /\.ht { deny all; } location ~* \.(ico|docx|doc|xls|xlsx|rar|zip|jpg|jpeg|txt|xml|pdf|gif|png|css|js|html)$ { root /var/www/domain-name.local; } add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Content-Security-Policy "block-all-mixed-content"; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; resolver 8.8.8.8; }
      
      





次に、このファイルへのシンボリックリンクを作成します

ln -s /etc/nginx/sites-available/domain-name.local /etc/nginx/sites-enabled/domain-name.local





編集/ etc / nginx / sites-available / default

nano /etc/nginx/sites-available/default





default_serverを削除しましょう。

そして、wwwからリダイレクトを挿入します。 そしてIP

 server { listen 80; listen [::]:80; server_name www.domain-name.local; return 301 http://domain-name.local$request_uri; } server { listen 80; listen [::]:80; server_name 192.168.0.101; return 301 http://domain-name.local$request_uri; }
      
      





Nginxを起動します。

service nginx start





すばらしい、どのように機能するかを確認できます。

ただし、その前に、ホストファイルCを編集します。\ Windows \ System32 \ drivers \ etc

テキストエディターでhostsファイルを開き、一番下に挿入します。

192.168.0.101 domain-name.local

192.168.0.101 www.domain-name.local






IPとドメインを独自のものに置き換えます。

ブラウザーでdomain-name.localに移動し 、このレシピに従ってすべてを行った場合、phpinfoのページが表示されます。

まあ、問題は小さなものに任されています。

PostgreSQLをセットアップします。

新しいPostgreSQLユーザーを作成する

sudo -u postgres createuser --superuser test-user





DBMSに入りましょう

sudo -u postgres psql





そして、新しいユーザーのパスワードを変更します

\password test-user





ここで、新しいユーザーは接続のタ​​イプを変更する必要があります。そのためには、pg_hba.confファイルを見つける必要があります。

書く

 SHOW hba_file;
      
      







DBMSを残す

\q





/etc/postgresql/10/main/pg_hba.confの編集を開始します

nano /etc/postgresql/10/main/pg_hba.conf





探している

# Database administrative login by Unix domain socket





以下が見つかります。

# Database administrative login by Unix domain socket

local all postgres peer






私たちはこのフォームに持ってきます:

# Database administrative login by Unix domain socket

local all postgres peer

local all test-user md5






PostgreSQLを再起動します

service postgresql restart





次に、新しいユーザーを介してDBMSにアクセスします

psql test-user -h 127.0.0.1 -d postgres





パスワードを入力すると、DBMSにアクセスします。

テストデータベースを作成する

 CREATE DATABASE test_db;
      
      





そしてすぐにそれに入る

\c test_db





pguint拡張機能を接続します

 CREATE EXTENSION uint;
      
      





テストパターンを作成します

 CREATE TABLE test_tb( id uint4 PRIMARY KEY, title TEXT );
      
      





テーブルにテストデータを入力します

 INSERT INTO test_tb(id, title) VALUES (1, '   1'), (2, '   2'), (3, '   3'), (4, '   4'), (5, '   5'), (6, '   6'), (7, '   7'), (8, '   8'), (9, '   9'), (10, '   10'), (2147483642, '   2147483642'), (2147483643, '   2147483643'), (2147483644, '   2147483644'), (2147483645, '   2147483645'), (2147483646, '   2147483646'), (2147483647, '   2147483647'), (2147483648, '   2147483648'), (2147483649, '   2147483649'), (2147483650, '   2147483650'), (2147483651, '   2147483651'), (2147483652, '   2147483652'), (4294967286, '   4294967286'), (4294967287, '   4294967287'), (4294967288, '   4294967288'), (4294967289, '   4294967289'), (4294967290, '   4294967290'), (4294967291, '   4294967291'), (4294967292, '   4294967292'), (4294967293, '   4294967293'), (4294967294, '   4294967294'), (4294967295, '   4294967295') RETURNING id, title;
      
      





test_tbテーブルの内容を見てみましょう

 SELECT * FROM test_tb;
      
      





それでは、このデータをphpから取得してみましょう。

DBMSへの接続を閉じます

\q





/var/www/domain-name.local/index.phpを開きます

nano /var/www/domain-name.local/index.php





それを次のフォームに持っていきましょう:

 <?php $dbh = new PDO('pgsql:host=localhost port=5432 user=test-user dbname=test_db password=password'); $test = $dbh->prepare('SELECT * FROM test_tb;'); $test->execute(); echo "<pre>"; print_r($test->fetchAll(PDO::FETCH_ASSOC)); echo "</pre>"; ?>
      
      





今、それが機能することを確認してください





素晴らしい、(Nginx + Apache)+ PostgreSQL + PHPを設定しましたが、正常に動作します。

サイトへのFTPアクセスを構成する



FTPサーバーをインストールする

apt-get install vsftpd





設定する前にvsftpdを停止します

service vsftpd stop





etc / vsftpd.confを開く

nano etc/vsftpd.conf





以下のパラメーターを設定/置換/切り替え:

  1. 聞く=はい
  2. listen_ipv6 = NO
  3. local_enable = YES
  4. write_enable = YES
  5. chroot_local_user = YES
  6. pam_service_name = ftp


FTP経由でアクセスする新しいユーザーを作成します

useradd -d /home/domain-name -s /sbin/nologin domain-name





パスワードを設定します

passwd domain-name





ユーザーのホームディレクトリを作成する

mkdir -p /home/domain-name





彼女に権利を設定する

chmod aw /home/domain-name





ユーザーのグループを作成します

groupadd ftps





グループにユーザーを追加

usermod -G ftps domain-name





ディレクトリの所有者を変更する

chown -R domain-name:ftps /home/domain-name





サイト用のフォルダーを作成します

mkdir /home/domain-name/domain-name.local





彼女の所有者を変更する

chown -R domain-name:ftps /home/domain-name/domain-name.local





ディレクトリをマウントし、ファイル/ etc / fstabを開きます

nano /etc/fstab





一番下に挿入

/var/www/domain-name.local /home/domain-name/domain-name.local none bind 0 0





所有者/var/www/domain-name.localを追加します

chown www-data:domain-name /var/www/domain-name.local/ -R





権利を割り当てる

find /var/www/domain-name.local -type d -exec chmod 775 {} \;

find /var/www/domain-name.local -type f -exec chmod 664 {} \;






vsftpdを実行します

service vsftpd start





チェック、FileZillaを使用します。





すべて順調です。ディレクトリを作成してみてください。





動作します。

安全なFTP接続を設定します。

vsftpdを停止します

service vsftpd stop





証明書を生成します

openssl req -x509 -nodes -days 720 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem





ここでは、あなたの魂が望むすべてを紹介します

国名(2文字のコード)[AU]:

州または県の名前(フルネーム)[一部の州]:

地域名(例:都市)[]:

組織名(会社など)[Internet Widgits Pty Ltd]:

組織単位名(例、セクション)[]:

共通名(サーバーFQDNまたはあなたの名前など)[]:

メールアドレス[]:


etc / vsftpd.confを開く

nano etc/vsftpd.conf





以下のパラメーターを設定/追加します。

  1. ssl_enable = YES
  2. ssl_tlsv1 =はい
  3. ssl_sslv2 = NO
  4. ssl_sslv3 = NO
  5. rsa_cert_file = / etc / ssl / private / vsftpd.pem
  6. rsa_private_key_file = / etc / ssl / private / vsftpd.key
  7. allow_anon_ssl = NO
  8. force_local_data_ssl = YES
  9. force_local_logins_ssl = YES
  10. ssl_ciphers = HIGH


vsftpdを保存して実行する

service vsftpd start





やってみましょう



やれやれ、すべてが機能し、Webアプリケーションの開発を始めることができます。



PSこのレシピは、唯一の正確かつ理想的なものではありません。 あなたが何かを見逃したか、このレシピを補うための提案があれば、コメントを歓迎します、私はどんな批判も受け入れます。 私のスキルが成長するにつれて、このレシピは補足され修正されます。



All Articles