Debian 9拉伸RC3专用Web服务器设置一步一步。 PHP7和MariaDB的时间

内容 隐藏

Debian 9(拉伸)释放候选人3(RC3)是 可用的 自从 2017年4月10日。 Debian 9 RC3. 仍然是“测试”发布(不建议生产 servers). 这是稳定Debian的发布日期 9? “当它准备好”是Debian的回答。但是,充实 freeze 2017年2月5日宣布 我们可以假设最终的稳定版本将可用 大约六个月(2017年中期)。请注意,没有专业 完全冻结后添加差异(仅错误修复)。

Debian 9(延伸)有两个非常重要的变化:

因此,测试您的项目至关重要,可能基于PHP 5. *和MySQL,为了使用Debian 9官方发布 server.

为此目的,我在虚拟机中设置Debian 9 RC3 using virtualbox..。正如Mariadb是一个替代品 对于MySQL,搬到MariaDB似乎很容易。用 mysql.dump 导出数据库,然后导入 他们到玛丽亚达。你可能会遇到一些问题 搬到php7.,取决于您的PHP代码。但 通常,迁移不是那么困难。下面我描述了我的 experience.

基础系统安装

Debian 9 RC3可以从中划分 这一页。我下载了 斯丁 amd64 ISO image from 这里 (一般为150-280 MB)。

我创建了一个带有200gb磁盘的virtualbox。下载的CD图像 必须附加到创建的VirtualBox:

我更喜欢“桥接”网络适配器:

启动虚拟机。它将从CD启动,所以Debian 安装将开始。请参阅下面的屏幕截图。

开始安装

对虚拟机的电源将启动Debian Setup。选择启动 来自CD(启动期间按F12。

设置

配置语言,位置和键盘。

网络

DHCP自动配置,设置主机名和域

用户

设置root密码并创建一个常见的用户。

磁盘分区

我用 EXT4 文件系统。所有分区都是主要的。一世 更愿意手动创建分区,如下所示:

  • / boot分区 4 GB
  • / 划分 200 GB
  • 交换分区 磁盘的其余部分:10+ GB(通常 RAM x 4)

下面描述了详细信息的分区(请注意: 仅/引导分区具有可启动标志)。

基础系统

安装基础系统。

包管理员

选择Debian归档镜像和 易于配置。

软件安装

软件安装进度。

人气竞赛

选择是否要参加受欢迎的比赛。

选择其他软件

安装核心系统后,额外的软件可以 被选中安装。这是一个服务器系统,所以只有ssh 已选择服务器和标准系统实用程序。任何 其他软件(Web服务器,数据库服务器等)将是 基础安装后手动安装(见下文)。

GRUB引导装载机

GRUB启动装载机安装。

完成安装

基础设置已完成。重新启动并首次登录。


This was the "base system" setup. From this point, I will customize the server according to my needs (LAMP setup etc).

添加静态IP.

The ifconfig command (included in 净工具 包装)已被推弃,所以它缺失 默认情况下,从Debian 9开始(伸展)。得到这一点 IP address you have to use the ip command.

[email protected]:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:4e:4c:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2a02:587:a012:e000:a00:27ff:fe4e:4c15/64 scope global mngtmpaddr dynamic
       valid_lft 46155sec preferred_lft 46155sec
    inet6 fe80::a00:27ff:fe4e:4c15/64 scope link
       valid_lft forever preferred_lft forever

因此,要使用DHCP IP更改自动配置 192.168.1.3 静止 192.168.1.103:

登录 。然后

纳米 /etc/network/interfaces

更换这一点

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s3
iface enp0s3 inet dhcp
# This is an autoconfigured IPv6 interface
iface enp0s3 inet6 auto

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug enp0s3
#iface enp0s3 inet dhcp

auto enp0s3
iface enp0s3 inet static
    address 192.168.1.103
    broadcast 192.168.1.255
    netmask 255.255.255.0
    gateway 192.168.1.1

# This is an autoconfigured IPv6 interface
#iface enp0s3 inet6 auto

最后,重新启动网络:

systemctl restart networking.service

使用ssh连接

来自工作站计算机:

ssh 192.168.1.103

然后成为 执行管理任务

su -l root

执行完整的系统更新

使用 易于-get.:

易于-get. update && apt-get -V upgrade

更新文件数据库

安装包(如果未安装):

易于-get. install locate mlocate

然后

updatedb

硬化ssh.

这是局域网机中的可选。无论如何,编辑ssh configuration:

纳米 /etc/ssh/sshd_config

进行以下更改

...
PermitRootLogin no
...
X11Forwarding no
...
AllowUsers your_user_name ...
...

重新启动SSH.

systemctl restart ssh.service

SSH基于关键的身份验证

首先,生成一个新的ssh键

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "your_email_here"

要从工作站连接到服务器计算机,请添加您的公众 key to server.

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.103

颜色Bash提示

要将颜色添加到常见的用户提示:

cd /home/pontikis
nano .bashrc

解释 #force_color_prompt =是

...
force_color_prompt=yes
...

要将红色添加到root提示符:

cd /root
nano .bashrc

PS1 as follows:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

另外,找到 #如果您,您可能会取消下列以下行 想要面向着色: 并取消关注以下内容 lines

要查看您必须重新开始和登录的更改,或转到 home and give

. .bashrc

设置默认文本编辑器

纳米 in my case:

update-alternatives --config editor

结果:

There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/nano            40        manual mode
  2            /usr/bin/mcedit      25        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

定制 纳米 text editor

Distpay线号,取消注册 # 放 constantshow

纳米 /etc/nanorc

## Constantly display the cursor position in the statusbar.  Note that
## this overrides "quickblank".
# set constantshow
set constantshow
## (The old form, 'const', is deprecated.)

安装 NTP. (网络时间协议)

使用 易于-get.

易于-get. install ntp

安装 Webmin

您必须知道原始的Linux命令执行全部 命令行的管理任务。但是,一个控制面板 有时更容易让事情变得更加容易。 Webmin 是一个免费和开放的来源 控制面板基本上用于Linux。 Webmin是一个非常强大的工具, 但我主要用于以下任务:

  • 用户管理
  • iptables防火墙
  • 预定的cron工作

所以,创建一个文件

纳米 /etc/apt/sources.d/webmin.list

并添加以下行

deb http://download.webmin.com/download/repository sarge contrib

添加 易于 key:

cd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc

最后

易于-get. update
apt-get install apt-transport-https
apt-get install webmin

安装Exim4. MTA.

使用 易于-get.:

易于-get. install exim4

配置exim.

这是一台本地机器,所以你必须使用“smarthost”。看 Gmail. smarthost与exim4在debian上 为了 details.

转发根邮件

作为各种软件和服务发送邮件至关重要 告知root for结果或错误(cr for example).

纳米 /etc/aliases

...
root:your_email_gere

然后,重建别名:

newaliases

安装 Git.(可选的)

使用 易于-get.:

易于-get. install git

显示基本配置

Git. config --list

设置基本设置

Git. config --global user.name 'Your Name'
git config --global user.email [email protected]
git config --global core.editor "nano"

配置Git才能正确处理线路结束:

Git. config --global core.autocrlf input

各种工具(可选)

使用 易于-get.:

易于-get. install mc p7zip-full htop

擦拭 可用于安全删除文件是有用的。

易于-get. install wipe

获取更新的电子邮件通知

安装 Aphticron. 获取电子邮件通知 updates

易于-get. install apticron

在更新后检查需要重新启动哪些服务

易于-get. install needrestart

阅读此帖子中的详细信息: 何时重新启动服务或在Debian更新后重新启动 or Ubuntu


Next part is LAMP (Linux, Apache, MySQL, PHP) setup. Additionally I describe Postgresql setup (optional) and memcached setup (optional).

玛利亚二数据库服务器

使用 易于-get.:

易于-get. install mariadb-server

(这也可以安装 Mariadb-Client.)

安装后,运行:

mysql._secure_installation.

mysql._secure_installation. sets a root password (如果不存在),删除匿名用户,禁用非本地根 访问,删除与它相关的测试数据库和访问规则 最后重新加载权限。

重新启动MariaDB.

systemctl restart mariadb.service

配置连接模式 - 重要

此时,当您尝试连接到MariaDB(或MySQL)时 你会注意到一些“奇怪”:

  • 如果你是 在您的服务器上,您可以连接 直接到MariaDB(或MySQL) account without any 密码,即使您已定义密码。命令 玛利亚二 (or mysql.) is enough:
    根@stretch-rc3:~# mariadb
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 10
    Server version: 10.1.22-MariaDB- Debian 9.0
    
    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]>
    
  • 服务器中的常见用户无法连接到MariaDB(或 MySQL) 帐户使用root密码。命令 玛利亚二 -uroot -p (or mysql. -uroot -p) will fail:
    [email protected]:~$ mariadb -uroot -p
    Enter password:
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'
    

    备注,当您提供时,此错误不是您获得的错误 wrong password:

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    

此原因是:UNIX_Socket插件 (MySQL中的auth_socket)默认在新安装中安装 Ubuntu 15.10及更高版本,Debian 9伸展。

更多为MariaDB的更多 这里 和mysql. 这里.

在这种情况下,您有两种选择:

  • 要么修改您的PHP代码,要连接到MariaDB / MySQL 使用操作系统用户
  • 或者恢复为Classic Password身份验证:

    变得 并登录MariaDB / MySQL。然后,执行 the query:

    update mysql.user set plugin = '' where User='root';
    flush privileges;
    

    或(实际上是一样的)

    update mysql.user set plugin = 'mysql_native_password' where User='root';
    flush privileges;
    

    就个人而言,我选择了这个解决方案。

PostgreSQL数据库服务器(可选)

安装

易于-get. install postgresql

(这也将安装PostgreSQL-Contract)

配置

postgres. 密码和配置 PostgreSQL..conf.pg_hba.conf.

我更喜欢 md5 authentication.

重启postgres.

systemctl restart postgresql.service

Apache Web服务器

安装

易于-get. install apache2

配置原则

默认文档根目录: / var / www / html /

配置文件: /etc/apache2/apache2.conf.Conf.。请勿编辑此文件。添加 您的配置 / etc / apache2 / conf可用/. Example:

纳米 / etc / apache2 / conf可用/my-config.conf
a2enconf my-config
systemctl restart apache2.service

Apache模块

启用所需的模块。在我的情况下

a2enmod rewrite

结果:

根@stretch-rc3:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
[email protected]:~# systemctl restart apache2.service

配置虚拟主机

首先修改“默认主机”。记得删除 <VirtualHost *:80>

纳米 /etc/apache2/sites-available/000-default.conf

添加

<VirtualHost 192.168.1.103:80>

    ServerName www.dev.lo
    ServerAdmin [email protected]

    DocumentRoot /var/www/html
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/html/>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
                Require all granted
    </Directory>

    <Directory /var/www/html/webadmin>
        Options +Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

这是另一个例子(有 gzip压缩):

纳米 /etc/apache2/sites-available/pnet.dev.lo.conf

添加

<VirtualHost 192.168.1.103:80>

    ServerName  pnet.dev.lo
    ServerAdmin [email protected]

    DocumentRoot /var/www/html/pontikis.net

    <Directory /var/www/html/pontikis.net>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/pontikis.net_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/pontikis.net_access.log combined

    ErrorDocument 404 /404/

    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

</VirtualHost>

启用网站:

a2ensite pnet.dev.lo.conf
systemctl restart apache2.service

检查Apache配置

Apach.ctl configtest

结果:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

避免此警告

纳米 / etc / apache2 / conf可用/fqdn.conf

添加servername指令:

ServerName www.dev.lo

然后

a2enconf fdqn
systemctl restart apache2.service

来自工作站的本地域

要从工作站中使用本地域,请将记录添加到文件 / etc / hosts。在我的情况下:

sudo nano /etc/hosts

这里有些例子:

127.0.0.1   localhost
127.0.1.1   athena

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# Local domains
192.168.1.103   www.dev.lo
192.168.1.103   dev.lo
192.168.1.103   another-sub-domain.dev.lo

重新启动Apache.

systemctl restart apache2.service

PHP.7

安装

使用 易于-get.:

易于-get. install php7.0

配置原则

主要配置文件(作为Apache模块): /etc/php/7.0/apache2/php.ini.。请勿编辑此文件。添加 您的配置 /etc/php/7.0/apache2/conf.d/ . Example:

纳米 /etc/php/7.0/apache2/conf.d/ my-config.ini
systemctl restart apache2.service

主要配置文件(CLI命令行 interface): /etc/php/7.0/cli/php.ini.。不要 编辑此文件。将配置添加到 /etc/php/7.0/cli/conf.d/.

PHP.info.

创建文件 PHP.info..php. 在您的Web服务器(不是 像这样的示例一样,可用于生产服务器:

纳米 /var/www/html/webadmin/phpinfo.php

添加

<?php phpinfo() ?>

使用此文件检查PHP配置(作为Apache模块)。 Example:

http://www.dev.lo/webadmin/phpinfo.php

错误日志

启用PHP错误日志。日志文件必须从Apache中写入。 So:

mkdir /var/log/php
chown www-data /var/log/php

创建配置文件:

纳米 /etc/php/7.0/apache2/conf.d/ 99_error_log.ini

放:

error_log = /var/log/php/php_errors.log.

记得旋转 /var/log/php/php_errors.log.:

纳米 /etc/logrotate.d/php

添加以下内容:

/var/log/php/php_errors.log. {
        weekly
        missingok
        rotate 4
        notifempty
        create
}

PHP.扩展

安装您需要的PHP扩展/模块。这是一个测试 服务器,因此我为各种项目安装了许多扩展。

查找完整列表 这里.

安装扩展和重新启动Apache后,您将 查看相关变更 PHP.info..

要从命令行检查安装的PHP扩展,请使用:

PHP. -m

mysql.

易于-get. install php7.0-mysql

PostgreSQL.

易于-get. install php7.0-pgsql

Intl.

易于-get. install php7.0-intl

MBString.

易于-get. install php7.0-mbstring

卷曲

易于-get. install php7.0-curl

压缩

易于-get. install php7.0-zip

XML.

易于-get. install php7.0-xml

Gd.

易于-get. install php7.0-gd

Mcrypt.

易于-get. install php7.0-mcrypt

GetText.

易于-get. install php-gettext

memcached.

易于-get. install php-memcached

硬化php.

创建配置文件

纳米 /etc/php/7.0/apache2/conf.d/ 99_security.ini

与内容

allow_url_include = Off
allow_url_fopen = Off
session.use_only_cookies = 1
session.cookie_httponly = 1
expose_php = Off
display_errors = Off
register_globals = Off
disable_functions = shell_exec, escapeshellarg, escapeshellcmd, passthru, proc_close, proc_get_status, proc_nice, proc_open,proc_terminate

(特别是根据您的需求而有所不同,特别是 “disable_functions”)。

重新启动Apache.

systemctl restart apache2.service

安装数据库管理器

PHP.myadmin管理员 很受欢迎。我更喜欢 管理员:

You may use 易于-get. install adminer, but I prefer 要下载最新的包

mkdir /var/www/html/wedamin/adminer
cd /var/www/html/wedamin/adminer
wget //github.com/vrana/adminer/releases/download/v4.3.1/adminer-4.3.1-en.php

在生产服务器中,限制访问此目录的访问 .htaccess

安装 memcached. (optional)

使用 易于-get.:

易于-get. install memcached

阅读更多 memcached.安装和 使用Debian Server上的PHP配置

安装 PHP.memcachedadmin (optional):

cd /var/www/html/webadmin/
wget //blog.elijaa.org/wp-content/uploads/2017/03/phpmemcachedadmin-1.3.0.tar.gz
tar xvzf phpmemcachedadmin-1.3.0.tar.gz
mv phpmemcachedadmin-1.3.0 phpMemcachedAdmin
cd phpMemcachedAdmin/Config
cp Memcache.sample.php Memcache.php
chmod g+w Memcache.php
chmod o+w Memcache.php
cd ..
chmod 777 Temp

在生产服务器中,限制访问此目录的访问 .htaccess

重新启动Apache.

systemctl restart apache2.service


Almost ready...

执行(再次)完整的系统更新

使用 易于-get.:

易于-get. update && apt-get -V upgrade

更新文件数据库(再次)

用:

updatedb

享受debian 9 stract!

Debianart主题偶像


Summary of important changes concerning php7 and MariaDB

PHP.7不兼容5.6(和解决方案)

我管理的各种WebApps遇到的问题

  1. PHP.-GetText不会正确翻译(返回EN_US 任何语言翻译)
  2. Swiftmailer. errors
    2017-04-17 15:26:35: [ErrNo=16384 (UNKNOWN ERROR), File=/path/to/SwiftMailer_v5.4.6/lib/classes/Swift/Transport/MailTransport.php, Line=45] The Swift_Transport_MailTransport class is deprecated since version 5.4.5 and will be removed in 6.0. Use the Sendmail or SMTP transport instead.
    
    2017-04-17 15:26:35: [ErrNo=2 (WARNING), File=/path/to/SwiftMailer_v5.4.6/lib/classes/Swift/Transport/MailTransport.php, Line=259] escapeshellcmd() has been disabled for security reasons
    
  3. Phpass. errors
    [17-Apr-2017 17:05:26 UTC] PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor in /path/to/phpass-0.3/PasswordHash.php on line 27
    

解决方案,在我的案件中工作

  1. 我更换了
    putenv("LC_ALL=$locale");
    

    putenv("LANGUAGE=$locale");
    

    更多信息请访问 这个帖子

  2. 我在我的代码中替换
    $transport = Swift_MailTransport::newInstance();
    

    $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
    
  3. 我替换为class passwordhash
    function PasswordHash($iteration_count_log2, $portable_hashes)
    

    function __construct($iteration_count_log2, $portable_hashes)
    

从mysql转移到玛丽亚达

Mariadb是MySQL的替代品(到目前为止,至少)。 您不会发现日常工作中的显着差异。这 命令是相同的。完全是SQL代码 compatible.

在Debian 9 Stretting中,我更倾向于使用密码恢复使用操作系统用户(UNIX_PLUGIN)的默认身份验证,以使用密码进行经典身份验证。

相关文章

您也可能对。。。有兴趣

欢迎您的意见!

MediSign  -  ehr用于小医疗实践

EHR用于小医疗实践

病历。约会。电子发票。

每月9美元