拿到一台做网站的主机, 我们先要做一些环境初始化的工作, 由于这些工作会有些繁琐,因此记录一下. 后面将这些流程写成一个shell脚本,一次性完成.此次工作流程如下:
- 安全性设置
- 额外的目录创建
- 网站环境搭建
安全性设置
一般从某云上买的主机, 默认账户是root, 为了不被暴力破解, 我们首先需要设置一个强一点的密码,不过更好的方法是禁用root, 另外创建一个用户来作为日常管理的账户.
第一步: 创建一个新的账户,并且能够切换到root权限
比如我的用户名叫xiaobai, 添加用户名就是
useradd xiaobai
设置密码
passwd xiaobai
之后输入密码,一个新的账户就设定好了. 然后我们需要做的就是让这个用户拥有root权限, 要达到这个目的,我们需要编辑 /etc/sudoers
(假设你已经会使用vim了)
找到 root ALL=(ALL) ALL, 在这一行的下一行添加
xiaobai ALL=(ALL) ALL
之后保存推出,xiaobai这个用户已经拥有root权限了!
第二步: 禁止root用户登录
因为我们已经拥有了xiaobai用户,并且这个用户有了root权限(为了安全,建议在之前先用xiaobai账户试一下), 因此现在需要禁止root用户登录.要达到这个目的,我们需要修改 /etc/ssh/sshd_config
文件,找到 PermitRootLogin 这一行,原来应该是
PermitRootLogin yes
或者是
#PermitRootLogin yes
我们要改成
PermitRootLogin no
意思就是不允许root登录的,现在不允许了. 改完了之后重启一下sshd, centos7下面使用
systemctl restart sshd
之后用root就再也登录不上了, 只能用xiaobai账户登录.
建立一些用户和目录
前面说了,我是要建立一些网站,因此需要建立一些目录来存放,为了规划好这台机器,我把所有的网站都放在/data/sites
下面,所以我需要建立一些目录以及给这些目录分配用户组.
创建目录很简单
mkdir /data mkdir /data/sites
目录创建之后默认的拥有者是创建者,因此如果之后我们将网站放在里面,会出现nginx或者php-fpm无权限读取的问题,因此我们需要另外创建用户以及用户组.
添加用户,并且让这个用户不能登录
useradd www -s /sbin/nologin
这里我们添加了一个www用户,-s就是指定用户登录的脚本,这里用了/sbin/nologin,表示用户登录之后是用不了shell的,因此也就不能做任何操作,相当于用户不能登录.
现在我们把data下面所有的目录和文件的拥有者都改成www
chown -R www.www /data
网站环境搭建
实际上这一步就是安装软件和配置软件的过程
我们所需要安装的基础软件有 php7, nginx, mysql, memcached
安装php7
因为centos7的源没有php7,所以这里采用编译安装,安装的方法我在另一篇文章有记录,不过这里还是简单说一些.
首先安装依赖的软件
yum -y install gcc libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
下载php源代码
wget http://jp2.php.net/get/php-7.0.30.tar.gz/from/this/mirror
解压
tar -xvf mirror
解压之后会看到php-7.0.30的目录,进入,然后进入编译流程,编译很简单,按照下面的指令就可以成功,下面的编译配置是一个php网站运行的比较完整的环境了.
./configure --prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-config-file-scan-dir=/usr/local/php7/etc/php.d \
--with-mcrypt=/usr/include \
--enable-mysqlnd \
--with-mysqli \
--with-pdo-mysql \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-gd \
--with-iconv \
--with-zlib \
--enable-xml \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache
配置完毕之后,就可以开始编译安装了
make && make install
到现在,我们已经将php安装到了/usr/local/php7里面了.
现在要做的工作就是配置php-fpm以及将php-fpm做成服务启动,并且开机重启.
首先需要配置一下php.ini, php-fpm.conf, 这两个文件都是php自带的,我们直接复制过去就可以
进入到php的源码, 里面会有php.ini-production, 复制过来
cp php.ini-production /usr/local/php7/etc/php.ini
然后在/usr/local/php7/etc/里面有php-fpm.conf.default, 先cd到这个目录, 然后复制php-fpm.conf.default为php-fpm.conf
cp php-fpm.conf.default php-fpm.conf
在php-fpm.d下面有一个www.conf.default, 同样复制成www.conf
cp www.conf.default www.conf
为了让php-fpm能够用systemctl管理,我们需要编写php-fpm.service文件,并且放到/usr/var/systemd/system/里面. 在配置这个之前,我们需要知道php-fpm运行所产生的pid文件在哪儿, 只有这样, 才能对php-fpm进程进行重启,关闭等操作.
查看php-fpm.conf文件,发现是这样
;Pid file ; Note: the default prefix is /usr/local/php7/var ; Default Value: none ; pid = run/php-fpm.pid
接下来去掉pid这行的注释就可以了, 现在的pid文件在/usr/local/php7/run/php-fpm.pid
vim /usr/lib/systemd/system/php-fpm.service
[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=simple PIDFile=/usr/local/php7/run/php-fpm.pid ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID [Install] WantedBy=multi-user.target
到现在, php-fpm已经可以用systemctl管理了,使用systemctl start php-fpm
启动systemctl stop php-fpm
停止 systemctl restart php-fpm
重启, 开机自动启动systemctl enable php-fpm
下面是systemctl的一些指令
systemctl enable *.service #开机运行服务 systemctl disable *.service #取消开机运行 systemctl start *.service #启动服务 systemctl stop *.service #停止服务 systemctl restart *.service #重启服务 systemctl reload *.service #重新加载服务配置文件 systemctl status *.service #查询服务运行状态 systemctl --failed #显示启动失败的服务
安装nginx
nginx安装就简单了,直接 yum安装
yum install nginx
在nginx使用的时候,可能会出现上传文件500的问题, 这可能是因为更改了运行nginx的用户,需要同时设置/var/lib/nginx 这个目录的所属用户.
安装mysql
centos7里面的mysql已经被替换成了mariadb了,因此安装的命令是
yum install mariadb mariadb-server
安装完毕使用mysql_secure_installation来设定初始化密码以及其他的安全设定, 过程可以根据提示填写.
安装memcached
yum install memcached
到现在,所有的环境已经安装好!
你可能还喜欢下面这些文章
如果没有额外的设置,iterm2 使用 rzsz 的时候会卡在这个时候就需要使用iterm2提供的trigger来实现rzsz的功能。第一步:本机安装rzsz使用rzsz之前本地也需要安装如果没有安装brew,请先安装brew,mac必备的包管理器!第二步:创建发送和接收脚本发送文件的脚本如下,可以复制下面的内容,保存在 /usr/local/bin/iterm2-send-zmodem.sh中。接收文件的脚本如下,同样可以复制保存在/usr/local/bin/iterm2-recv-zmodem.sh第三步:设置Triggerteigger需要设置两个,一个实发送文件的trigger,一个
linux下面ftp服务器一般选择vsftpd这个免费开源的ftp程序。主要说一下其安装,配置,启动这些过程。 由于我的是centos系统,只需要使用就可以安装啦 ubuntu用安装完毕之后。首先在linux下面添加一个用户作为ftp用户 useradd –d /var/www/site -g ftp –s /sbin/nologin myftp -s /sbin/nologin 是让其不能登陆系统 -d 是指定用户目录为/var/www ,这里可以替换成任何你需要的目录。 -g ftp 把用户加入到ftp组中(vsftp已创建) myftp是ftp用户名,在配置时把这个myftp换成你的ft
编译步骤gcc 与 g++ 分别是 gnu 的 c & c++ 编译器。gcc/g++ 在执行编译工作的时候,总共需要4步:预处理,生成 .i 的文件将预处理后的文件转换成汇编语言, 生成文件 .s 有汇编变为目标代码(机器代码)生成 .o 的文件连接目标代码, 生成可执行程序 参数详解-x language filename参数含义为指定文件所使用的语言。根据约定,C语言的后缀名称为".c",而 C++ 的后缀名为".cpp"或".cc",但如果你的源代码后缀不约定的那几种,那么需要使用-x参数来指定文件所使用的语言。这个参数对他后面的文件名都起作用。 可以使用的参数吗有下面的这些:
机器搬家之后,之前一直稳定的PHP多进程程序子进程突然异常退出,但是退出的不是很频繁,查看进程日志并也没有发现有什么导致退出的,问题比较诡异。于是开启了一段问题排查之路。首先查看内核日志,使用dmesg,拉到最后发现有一些这样的错误,看来确实是崩溃了。 php: segfault at 7f6443ee18c8 ip 00007f6443ee18c8 sp 00007fff4d4ba818 error 15 in libc-2.17.so php: segfault at 0 ip 000000000075919d sp 00007fff0c6e0578 error 4 in php trap
这是一篇记录树莓派连接wifi的文章。这里我们使用wpa_cli的交互环境来连接无线网,这比直接使用配置要方便得多。注意,wpa_cli需要在root环境下执行终端下面执行: sudo wpa_cli -iwlan0-i参数表示使用哪个网卡,我们需要指定只用wlan0这个网卡。具体可以执行ifconfig看看都有哪些网卡可以使用,如果你的树莓派带有wifi模块,那么一般是wlan0进入交互模式之后,首先需要执行scan命令,该命令能扫描附近的热点。然后输入scan_result列出扫描出来的热点上面扫描出了我的一个手机热点。我们知道了热点的ssid之后就可以连接了,首先增加一个网络连接,执行a
本文假设你已经安装了varnish了,如果还没安装,那么请看前面的varnish的安装来安装varnish吧!下面的命令将会启动varnishservice varnish start现在你的varnish已经运行了,让我们确保它已经在工作吧!打开浏览器,在地址栏中输入http://127.0.0.1:6081/(你需要把ip替换成你的机器ip)默认的配置将会尝试将请求转发到该台机器上的8080端口上面。如果该台机器上面没有web服务,varnish将会返回Error 503 Service Unavailable。你的web应用可能运行在其他端口或者其他的机器,这需要编辑varnish的配置
项目做多了之后,可能会慢慢总结出自己的代码库出来,当在新的项目中使用的时候,总不能一直是复制粘贴。这个时候,composer就能派上用场了。一个项目开始,使用composer就能够加载所需要的依赖,非常方便。这个时候,来做一个自己的包吧!使用命名空间composer自动加载需要用到命名空间,因此所有的代码库都需要使用命名空间,如果没有,那就改吧!使用命名空间之后你可能会打开新世界的大门。创建composer.json我假设你已经安装了composer,并且已经会使用了。创建自己的包我们首先需要创建一个composer.json,示例文件如下上面的composer.json有一个比较重要的是au
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shel
Attention:this blog is a translation of https://www.internalpointers.com/post/c-rvalue-references-and-move-semantics-beginners ,which is posted by @internalpoiners.一、前言在我的前一篇文章里,我解释了右值背后的逻辑。核心的思想就是:在C++中你总会有一些临时的、生命周期较短的值,这些值无论如何你都无法改变。令人惊喜的是,现代C++(通常指C++0x或者更高的版本)引入了右值引用(rvalue reference)的概念:它是一个新的
C++中,动态内存管理是通过一对运算符来完成:new 和 delete。new操作符在内存中为对象分配空间并返回一个指向该对象的指针,delete接收一个动态对象的指针,销毁该对象,并释放与之相关的内存。手动管理内存看起来只有这两个操作,似乎很轻松,但实际上这是一件非常繁琐的事情,分配了内存但没有释放内存的场景发生的概率太大了!回想一下,你有多少次打开抽屉却没关上,拿出来的护肤品擦完脸之后却忘了放回去,吃完饭却忘了洗碗。类似这种没有收尾的事情我做的太多了。(以上这些都是在实际生活中我爱人批评我的点)我连这种明面上的事情都能忘记收尾,何况分配内存!所以为了世界和平,我放弃了手动管理内存。好在C+
赞赏微信赞赏支付宝赞赏