diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/en/admins/01_Index.md | 8 | ||||
| -rw-r--r-- | docs/en/admins/02_Installation.md (renamed from docs/en/users/01_Installation.md) | 141 | ||||
| -rw-r--r-- | docs/en/admins/03_Updating.md | 90 | ||||
| -rw-r--r-- | docs/en/contributing.md | 7 | ||||
| -rw-r--r-- | docs/en/developers/01_First_steps.md | 4 | ||||
| -rw-r--r-- | docs/en/developers/03_Backend/05_Extensions.md | 94 | ||||
| -rw-r--r-- | docs/en/index.md | 8 | ||||
| -rw-r--r-- | docs/en/users/02_First_steps.md | 4 | ||||
| -rw-r--r-- | docs/en/users/05_Configuration.md | 16 | ||||
| -rw-r--r-- | docs/en/users/06_Mobile_access.md | 52 | ||||
| -rw-r--r-- | docs/fr/developers/03_Backend/05_Extensions.md | 4 | ||||
| -rw-r--r-- | docs/fr/users/01_Installation.md | 136 | ||||
| -rw-r--r-- | docs/fr/users/06_Mobile_access.md | 50 |
13 files changed, 468 insertions, 146 deletions
diff --git a/docs/en/admins/01_Index.md b/docs/en/admins/01_Index.md new file mode 100644 index 000000000..446780060 --- /dev/null +++ b/docs/en/admins/01_Index.md @@ -0,0 +1,8 @@ +# FreshRSS administration + +Learn how to install, update and backup FreshRSS and how to use the command line tools. + +* [Install FreshRSS](02_Installation.md) on your server +* [Update your installation](03_Updating.md) to the latest stable or dev version +* [The command line interface](https://github.com/FreshRSS/FreshRSS/tree/master/cli) can be used to administrate feeds and users +* [Automatic feed updates](https://github.com/FreshRSS/FreshRSS#automatic-feed-update) using cron is the preferred way to get the latest feeds entries diff --git a/docs/en/users/01_Installation.md b/docs/en/admins/02_Installation.md index b2a717629..ef6531bd0 100644 --- a/docs/en/users/01_Installation.md +++ b/docs/en/admins/02_Installation.md @@ -1,6 +1,6 @@ # Server requirements -FreshRSS is a web application. This means you'll need a web server to run it. FreshRSS requirements are really low, so it could run on most shared host servers. +FreshRSS is a web application. This means you’ll need a web server to run it. FreshRSS requirements are really low, so it could run on most shared host servers. You need to verify that your server can run FreshRSS before installing it. If your server has the proper requirements and FreshRSS does not work, please contact us to find a solution. @@ -10,7 +10,7 @@ You need to verify that your server can run FreshRSS before installing it. If yo | PHP | **PHP 5.5+** | PHP 5.3.8+ | | PHP modules | Required: libxml, cURL, PDO_MySQL, PCRE and ctype. \\ Required (32-bit only): GMP \\Recommanded: JSON, Zlib, mbstring, iconv, ZipArchive | | | Database | **MySQL 5.0.3+** | SQLite 3.7.4+ | -| Browser | **Firefox** | Chrome, Opera, Safari or IE9+ | +| Browser | **Firefox** | Chrome, Opera, Safari, or IE11+ | ## Important notice @@ -35,86 +35,113 @@ As its name suggests, it is the working release for developers. **This release i # Apache installation -This is an example Apache virtual hosts configuration file. It covers http and https configuration. +This is an example Apache virtual hosts configuration file. It covers HTTP and HTTPS configuration. ``` <VirtualHost *:80> - ServerName example.com - DocumentRoot /path/to/FreshRSS + DocumentRoot /var/www/html/ - ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log - CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined + #Default site... - RewriteEngine on - RewriteCond %{SERVER_NAME} = example.com - RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + ErrorLog ${APACHE_LOG_DIR}/error.default.log + CustomLog ${APACHE_LOG_DIR}/access.default.log vhost_combined </VirtualHost> -<IfModule mod_ssl.c> -<VirtualHost *:443> - ServerName example.com - DocumentRoot /path/to/FreshRSS +<VirtualHost *:80> + ServerName rss.example.net + DocumentRoot /path/to/FreshRSS/p/ - ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log - CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined + <Directory /path/to/FreshRSS/p> + AllowOverride AuthConfig FileInfo Indexes Limit + Require all granted + </Directory> - SSLCertificateFile /path/to/server.crt - SSLCertificateKeyFile /path/to/server.key + ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log + CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined - # Optional letsencrypt config (uncomment) line below - #Include /etc/letsencrypt/options-ssl-apache.conf + AllowEncodedSlashes On </VirtualHost> + +<IfModule mod_ssl.c> + <VirtualHost *:443> + ServerName rss.example.net + DocumentRoot /path/to/FreshRSS/p/ + + <Directory /path/to/FreshRSS/p> + AllowOverride AuthConfig FileInfo Indexes Limit + Require all granted + </Directory> + + ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log + CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined + + <IfModule mod_http2.c> + Protocols h2 http/1.1 + </IfModule> + + # For the API + AllowEncodedSlashes On + + SSLEngine on + SSLCompression off + SSLCertificateFile /path/to/server.crt + SSLCertificateKeyFile /path/to/server.key + # Additional SSL configuration, e.g. with LetsEncrypt + </VirtualHost> </IfModule> ``` # Nginx installation -This is an example nginx configuration file. It covers http, https and php-fpm configuration. +This is an example nginx configuration file. It covers HTTP, HTTP, and php-fpm configuration. _You can find simpler config file but they may be incompatible with FreshRSS API._ ``` server { - listen 80; # http on port 80 - listen 443 ssl; # https on port 443 - - # https configuration - ssl on; - ssl_certificate /etc/nginx/server.crt; - ssl_certificate_key /etc/nginx/server.key; - - # your server's url(s) - server_name example.com rss.example.com; - - # the folder p of your FreshRSS installation - root /srv/FreshRSS/p/; - - index index.php index.html index.htm; - - # nginx log files - access_log /var/log/nginx/rss.access.log; - error_log /var/log/nginx/rss.error.log; - - # php files handling - # this regex is mandatory because of the API - location ~ ^.+?\.php(/.*)?$ { - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_split_path_info ^(.+\.php)(/.*)$; - # By default, the variable PATH_INFO is not set under PHP-FPM - # But FreshRSS API greader.php need it. If you have a "Bad Request" error, double check this var ! - fastcgi_param PATH_INFO $fastcgi_path_info; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } - - location / { - try_files $uri $uri/ index.php; - } + listen 80; + listen 443 ssl; + + # HTTPS configuration + ssl on; + ssl_certificate /etc/nginx/server.crt; + ssl_certificate_key /etc/nginx/server.key; + + # your server’s URL(s) + server_name rss.example.net; + + # the folder p of your FreshRSS installation + root /srv/FreshRSS/p/; + + index index.php index.html index.htm; + + # nginx log files + access_log /var/log/nginx/rss.access.log; + error_log /var/log/nginx/rss.error.log; + + # php files handling + # this regex is mandatory because of the API + location ~ ^.+?\.php(/.*)?$ { + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + # By default, the variable PATH_INFO is not set under PHP-FPM + # But FreshRSS API greader.php need it. If you have a “Bad Request” error, double check this var! + fastcgi_param PATH_INFO $fastcgi_path_info; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + location / { + try_files $uri $uri/ index.php; + } } ``` -A step-by-step tutorial is available [in french](http://www.pihomeserver.fr/2013/05/08/raspberry-pi-home-server-installer-un-agregateur-de-flux-rss-pour-remplacer-google-reader/). +A step-by-step tutorial is available [in French](http://www.pihomeserver.fr/2013/05/08/raspberry-pi-home-server-installer-un-agregateur-de-flux-rss-pour-remplacer-google-reader/). # Security +Make sure to expose only the `./p/` folder on the web, the other directories contain personal and sensitive data. +See the Apache and nginx config examples above. + **TODO** diff --git a/docs/en/admins/03_Updating.md b/docs/en/admins/03_Updating.md new file mode 100644 index 000000000..4e1fdfa5d --- /dev/null +++ b/docs/en/admins/03_Updating.md @@ -0,0 +1,90 @@ + +First things first: we recommend to create a backup before updating: + +```sh +# Perform all commands below in your FreshRSS directory: +cd /usr/share/FreshRSS + +tar -czvf FreshRSS-backup.tgz . +``` + +The update process depends on your installation type, see below: + + +## Using the web admin panel + +Change to your installation at http://localhost/FreshRSS/p/i/?c=update and hit the "Check for new updates" button. + +If there is a new version you will be prompted again. + + +## Using git + +If you manage FreshRSS via command line, then installing and updating FreshRSS can be done via git: + +```sh +# If your local user does not have write access, prefix all commands by sudo: +sudo ... + +# Perform all commands below in your FreshRSS directory: +cd /usr/share/FreshRSS + +# Use the development version of FreshRSS +git checkout -b dev origin/dev + +# Check out a specific version of FreshRSS +# See release names on https://github.com/FreshRSS/FreshRSS/releases +# You will then need to manually change version +# or checkout master or dev branch to get new versions +git checkout 1.7.0 + +# Verify what branch is used +git branch + +# Check whether there is a new version of FreshRSS, +# assuming you are on the /master or /dev branch +git fetch --all +git status + +# Discard manual changes (do a backup before) +git reset --hard +# Then re-delete the file forcing the setup wizard +rm data/do-install.txt + +# Delete manual additions (do a backup before) +git clean -f -d + +# Update to a newer version of FreshRSS, +# assuming you are on the /master or /dev branch +git pull + +# Set the rights so that your Web server can access the files +# (Example for Debian / Ubuntu) +chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/ +``` + + +## Using the zip archive + +Perform all commands in your FreshRSS directory: +```sh +cd /usr/share/FreshRSS +``` + +Commands intended to be executed in order (you can c/p the whole block if desired): + +```sh +wget https://github.com/FreshRSS/FreshRSS/archive/master.zip +unzip master.zip +cp -R FreshRSS-master/* . +chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/ +rm -f master.zip +rm -f data/do-install.txt +rm -rf FreshRSS-master/ +``` + +Short explanation of the commands above: +* Download the latest version and unzip it +* Overwrite all your existing files with the new ones +* Fix possible permission issues +* Cleanup by deleting the downloaded zip, the file forcing the setup wizard and the temporary directory diff --git a/docs/en/contributing.md b/docs/en/contributing.md index 7f0c3da6c..19f9cb9b1 100644 --- a/docs/en/contributing.md +++ b/docs/en/contributing.md @@ -32,9 +32,9 @@ Did you want to fix a bug? To keep a great coordination between collaborators, y 3. [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/). The name of the branch must be explicit and being prefixed by the related ticket id. For instance, `783-contributing-file` to fix [ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783). 4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/) on the **dev branch**. -If you have to write code, please follow [our coding style recommendations](http://doc2.freshrss.org/en/Developer_documentation/First_steps/Coding_style). +If you have to write code, please follow [our coding style recommendations](developers/01_First_steps.md). -**Tip:** if you are searching for bugs easy to fix, have a look at the « [New comers](https://github.com/FreshRSS/FreshRSS/labels/New%20comers) » ticket label. +**Tip:** if you are searching for easy-to-fix bugs, have a look at the « [good first issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) » ticket label. ## Submit an idea @@ -52,4 +52,5 @@ We are working on a better way to handle internationalization but don't hesitate ## Contribute to documentation -The documentation needs a lot of improvements in order to be more useful to new contributors and we are working on it. If you want to give some help, meet us on [the dedicated repository](https://github.com/FreshRSS/documentation)! +The documentation needs a lot of improvements in order to be more useful to new contributors and we are working on it. +If you want to give some help, meet us in the main repositories [docs directory](https://github.com/FreshRSS/FreshRSS/tree/master/docs)! diff --git a/docs/en/developers/01_First_steps.md b/docs/en/developers/01_First_steps.md index e35dbda12..adca4495b 100644 --- a/docs/en/developers/01_First_steps.md +++ b/docs/en/developers/01_First_steps.md @@ -6,6 +6,10 @@ **TODO** +# Extensions + +If you want to create your own FreshRSS extension, take a look at the [extension documentation](03_Backend/05_Extensions.md). + # Coding style If you want to contribute to the source code, it is important to follow the project coding style. The actual code does not follow it throughout the project, but every time we have an opportunity, we should fix it. diff --git a/docs/en/developers/03_Backend/05_Extensions.md b/docs/en/developers/03_Backend/05_Extensions.md index b0b5793df..fb85234c4 100644 --- a/docs/en/developers/03_Backend/05_Extensions.md +++ b/docs/en/developers/03_Backend/05_Extensions.md @@ -6,21 +6,41 @@ FreshRSS is an RSS / Atom feeds aggregator written in PHP since October 2012. Th ## Problem to solve -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +FreshRSS is limited in its technical possibilities by various factors: + +* The number of developers +* The will to integrate certain changes +* The level of "hacking" required to integrate marginal features + +While the first limitation can, in theory, be lifted by the participation of new contributors to the project, it depends on the willingness of contributors to take an interest in the source code of the entire project. In order to remove the other two limitations, most of the time it will be necessary to create a "fork". + +Another solution consists of an extension system. By allowing users to write their own extension without taking an interest in the core of the basic software, we allow for: + +1. Reducing the amount of source code a new contributor has to take in +2. Unofficial integration of novelties +3. No necessity of forking or main developer approvement. + +Note: it is quite conceivable that the functionalities of an extension can later be officially integrated into the FreshRSS code. Extensions make it easy to propose a proof of concept. ## Understanding basic mechanics (Minz and MVC) **TODO** : move to 02_Minz.md -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +This data sheet should refer to the official FreshRSS and Minz documentation (the PHP framework on which FreshRSS is based). Unfortunately, this documentation does not yet exist. In a few words, here are the main things you should know. It is not necessary to read all the chapters in this section if you don't need to use a feature in your extension (if you don't need to translate your extension, no need to know more about the `Minz_Translate` module for example). ### MVC Architecture -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +Minz relies on and imposes an MVC architecture for projects using it. This architecture consists of three main components: + +* The model: this is the base object that we will manipulate. In FreshRSS, categories, flows and articles are templates. The part of the code that makes it possible to manipulate them in a database is also part of the model but is separated from the base model: we speak of DAO (for "Data Access Object"). The templates are stored in a `Models` folder. +* The view: this is what the user sees. The view is therefore simply HTML code mixed with PHP to display dynamic information. The views are stored in an `views` folder. +* The controller: this is what makes it possible to link models and views. Typically, a controller will load templates from the database (like a list of items) to "pass" them to a view for display. Controllers are stored in a `Controllers` directory. ### Routing -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +In order to link a URL to a controller, first you have to go through a "routing" phase. In FreshRSS, this is particularly simple because it suffices to specify the name of the controller to load into the URL using a `c` parameter. For example, the address http://exemple.com?c=hello will execute the code contained in the `hello` controller. + +One concept that has not yet been discussed is the "actions" system. An action is executed *on* a controller. Concretely, a controller is represented by a class and its actions by methods. To execute an action, it is necessary to specify an `a` parameter in the URL. Code example: @@ -40,13 +60,17 @@ class FreshRSS_hello_Controller extends Minz_ActionController { ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +When loading the address http://exemple.com?c=hello&a=world, the `world` action is executed on the `hello` controller. + +Note: if `c` or `a` is not specified, the default value for each of these variables is `index`. So the address http://exemple.com?c=hello will execute the `index` action of the `hello` controller. + +Later, the `hello/world` convention will be used to refer to a controller/action pair. ### Views -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +Each view is associated with a controller and an action. The view associated with `hello/world` will be stored in a very specific file: `views/hello/world. phtml`. This convention is imposed by Minz. -Code example: +As explained above, the views consist of HTML mixed with PHP. Code example: ```html <p> @@ -54,12 +78,11 @@ Code example: </p> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +The variable `$this->a_variable` is passed by the controller (see previous example). The difference is that in the controller it is necessary to pass `$this->view`, while in the view `$this` suffices. ### Working with GET / POST -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) - +It is often necessary to take advantage of parameters passed by GET or POST. In Minz, these parameters are accessible using the `Minz_Request` class. Code example: ```php @@ -82,15 +105,17 @@ echo Minz_Request::param('bar'); ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +The `Minz_Request::isPost()` method can be used to execute a piece of code only if it is a POST request. + +Note: it is preferable to use `Minz_Request` only in controllers. It is likely that you will encounter this method in FreshRSS views, or even in templates, but be aware that this is **not** good practice. ### Access session settings -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +The access to session parameters is strangely similar to the GET / POST parameters but passes through the `Minz_Session` class this time! There is no example here because you can repeat the previous example by changing all `Minz_Request` to `Minz_Session`. ### Working with URLs -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +To take full advantage of the Minz routing system, it is strongly discouraged to write hard URLs in your code. For example, the following view should be avoided: ```html <p> @@ -98,7 +123,9 @@ echo Minz_Request::param('bar'); </p> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +Should it be decided one day to use a "url rewriting" system to have addresses in a http://exemple.com/controller/action format, all previous addresses would become ineffective! + +So use the `Minz_Url` class and its `display()` method instead. `Minz_Url::display()` takes an array of the following form as its argument: ```php <?php @@ -117,7 +144,7 @@ echo Minz_Url::display($url_array); ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +Since this can become a bit tedious to use in the long run, especially in views, it is preferable to use the `_url()' shortcut: ```php <?php @@ -128,11 +155,11 @@ echo _url('hello', 'world', 'foo', 'bar'); ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +Note: as a general rule, the shortened form (`_url()`) should be used in views, while the long form (`Minz_Url::display()`) should be used in controllers. ### Redirections -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +It is often necessary to redirect a user to another page. To do so, the `Minz_Request` class offers another useful method: `forward()`. This method takes the same URL format as the one seen just before as its argument. Code example: @@ -156,7 +183,7 @@ Minz_Request::forward($url_array, true); ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +It is very common to want display a message to the user while performing a redirect, to tell the user how the action was carried out (validation of a form for example). Such a message is passed through a `notification` session variable (note: we will talk about feedback from now on to avoid confusion with a notification that can occur at any time). To facilitate this kind of very frequent action, there are two shortcuts that both perform a 302 redirect by assigning a feedback message: ```php <?php @@ -179,7 +206,21 @@ Minz_Request::bad($feedback_bad, $url_array); ### Translation Management -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +It is common (and that's an understatement) to want to show some text to the user. In the previous example, for example, we display feedback to the user based on the result of form validation. The problem is that FreshRSS has users of different nationalities. It is therefore necessary to be able to manage different languages in order not to remain confined to English or French. + +The solution is to use the `Minz_Translate` class, which allows dynamic translation of FreshRSS (or any Minz-based application). Before using this module, it is necessary to know where to find the strings to be translated. Each language has its own subdirectory in a parent directory named `i18n`. For example, English language files are located in `i18n/fr/`. There are seven different files: + +- `admin.php` for anything related to FreshRSS administration +- `conf.php` for configuration +- `feedback.php` contains translations of feedback messages +- `gen.php` stores what is global to FreshRSS (gen for "general") +- `index.php` for the main page that lists feeds and the About page +- `install.php` contains strings related FreshRSS installation +- `sub.php` for subscription management (sub for :subscription") + +This organization makes it possible to avoid a single huge translation file. + +The translation files are quite simple: it is only a matter of returning a PHP table containing the translations. Extract from `app/i18n/en/gen.php`: ```php <?php @@ -201,8 +242,7 @@ return array( ?> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) - +To access these translations, `Minz_Translate` will help us with its `Minz_Translate::t()` method. As this can be a bit long to type, a shortcut has been introduced that **must** be used in all circumstances: `_t()`. Code example: ```html @@ -213,11 +253,11 @@ Code example: </p> ``` -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +The string to pass to the `_t()` function consists of a series of identifiers separated by dots. The first identifier indicates from which file to extract the translation (in this case, `gen.php`), while the following ones indicate table entries. Thus `action` is an entry of the main array and `back_to_rss_feeds` is an entry of the `action` array. This allows us to further organize our translation files. -### Configuration management +There is a small special case that sometimes makes life easier: the `_` identifier. This must necessarily be present at the end of the chain and gives a value to the higher-level identifier. It's pretty hard to explain but very simple to understand. In the example given above, a `_` is associated with the value `FreshRSS`: this means that there is no need to write `_t('gen.freshrss._')` but `_t('gen.freshrss')` suffices. -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +### Configuration management ## Write an extension for FreshRSS @@ -254,7 +294,7 @@ You may also need additional files or subdirectories depending on your needs: - `configure.phtml` is the file containing the form to parameterize your extension - A `static/` directory containing CSS and JavaScript files that you will need for your extension (note that if you need to write a lot of CSS it may be more interesting to write a complete theme) -- A `controllers` directory containing additional controllers +- A `Controllers` directory containing additional controllers - An `i18n` directory containing additional translations - `layout` and` views` directories to define new views or to overwrite the current views @@ -298,7 +338,7 @@ In addition, you will have a number of methods directly inherited from `Minz_Ext - `getFileUrl($filename, $type)` will return the URL to a file in the `static` directory. The first parameter is the name of the file (without `static /`), the second is the type of file to be used (`css` or` js`). - `registerController($base_name)` will tell Minz to take into account the given controller in the routing system. The controller must be located in your `Controllers` directory, the name of the file must be` <base_name>Controller.php` and the name of the `FreshExtension_<base_name>_Controller` class. -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +**TODO** - `registerViews()` - `registerTranslates()` @@ -331,4 +371,4 @@ The following events are available: When you want to support user configurations for your extension or simply display some information, you have to create the `configure.phtml` file. -**TODO** translate from [french version](https://github.com/FreshRSS/documentation/blob/master/fr/docs/developers/03_Backend/05_Extensions.md) +**TODO** diff --git a/docs/en/index.md b/docs/en/index.md index c2f12380b..a0c97a0d9 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -16,7 +16,9 @@ FreshRSS has a lot of features including: - Multi-users so you can host your friends and your family - And a lot more! -This documentation is splitted in two sections: +This documentation is split into four sections: -- [users documentation](users/02_First_steps.md) so you can discover all the power of FreshRSS -- [developers documentation](developers/01_First_steps.md) to guide you in the source code of FreshRSS and to help you if you want to contribute +- [user documentation](users/02_First_steps.md) so you can discover all the power of FreshRSS +- [developer documentation](developers/01_First_steps.md) to guide you in the source code of FreshRSS and to help you if you want to contribute +- [administrator documentation](admins/01_Index.md) to guide you in the source code of FreshRSS and to help you if you want to contribute +- [contributor guidelines](contributing.md) for all of you who want to help improving FreshRSS diff --git a/docs/en/users/02_First_steps.md b/docs/en/users/02_First_steps.md index 96ee264a6..2fb1b7256 100644 --- a/docs/en/users/02_First_steps.md +++ b/docs/en/users/02_First_steps.md @@ -2,7 +2,7 @@ Learning how to handle a new application is not always easy. We build FreshRSS t This section guides you to the pages you need as a new comer. -[After you installed the application](01_Installation.md), the first step is to add one or more feeds. You have few options: +[After installing the application](../admins/02_Installation.md), the first step is to add some feeds. You have a few options: 1. [Add a feed manually](04_Subscriptions.md#adding-a-feed) 2. [Import an OPML or JSON file](04_Subscriptions.md#import-and-export) @@ -24,3 +24,5 @@ Now that you know the basic usages, it is time to configure FreshRSS to improve * [Filter articles](03_Main_view.md#filtering-articles) for a fast access to a selection * [Search an article](03_Main_view.md#searching-articles) published some time ago * [Access your feeds on a mobile device](06_Mobile_access.md) +* [Add some extensions](https://github.com/FreshRSS/Extensions) +* [Frequently asked questions](07_Frequently_Asked_Questions.md) diff --git a/docs/en/users/05_Configuration.md b/docs/en/users/05_Configuration.md index f8ac56cd7..d0951e905 100644 --- a/docs/en/users/05_Configuration.md +++ b/docs/en/users/05_Configuration.md @@ -20,7 +20,7 @@ In matters of taste and color, there can be no disputes. This is why FreshRSS of If none of these are suitable for you, it is always possible to create your own. -To select a theme, simply scroll through the themes and select a theme that appears. After confirmation, the theme will be applied to the interface. +To select a theme, simply scroll through the themes and select one that strikes your fancy. After confirmation, the theme will be applied to the interface. ## Content width @@ -69,10 +69,10 @@ The duration of this notification can be set. By default, the value is 0. ### HTTP Authentication (Apache) - 1. User control is based on the .htaccess file - 2. It is best practice to place the .htaccess file in ./i/ subdirecotry so API and other third party services can work. - 3. If you want to limit all access to registered users only, place the file in the directory of FreshRSS or in a parent directory. Note that PubsubHubbub and API will not work! - 4. Example .htaccess file for a user "marie": + 1. User control is based on the `.htaccess` file. + 2. It is best practice to place the `.htaccess` file in the `./i/` subdirectory so the API and other third party services can work. + 3. If you want to limit all access to registered users only, place the file in the FreshRSS directory itself or in a parent directory. Note that PubsubHubbub and API will not work! + 4. Example `.htaccess` file for a user "marie": ``` AuthUserFile /home/marie/repertoire/.htpasswd @@ -82,7 +82,7 @@ AuthType Basic Require user marie ``` -More information can be found in [Apache documentation](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking). +More information can be found in the [Apache documentation](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking). # Subscription management @@ -104,7 +104,7 @@ More information can be found in [Apache documentation](http://httpd.apache.org/ The question comes up regularly, so we will try to clarify here how one can retrieve a truncated RSS feed with FreshRSS. Please note that the process is absolutely not "user friendly", but it works :) -Also know that this way you are generating much more traffic to the originating sites and that they can block you accordingly. The performance of FreshRSS is also imapcted because you have to fetch the contents of the articles one by one. So it's a feature to use sparingly! +Also know that this way you are generating much more traffic to the originating sites and that they might block you accordingly. The performance of FreshRSS is also negatively affected because you have to fetch the full article content one by one. So it's a feature to use sparingly! What is meant by "CSS path of articles on the original site" actually corresponds to the "path" consisting of IDs and classes (which in html, matches the id and class attributes) to retrieve only the interesting part that corresponds to the article. Ideally, this path starts with an id (which is unique to the page). @@ -118,4 +118,4 @@ We find here that the block that encompasses only the content of the article is * Rue89: ```#article .content``` * PCINpact: ```#actu_content``` -* Lesnumériques: ```article#body div.text.clearfix```
\ No newline at end of file +* Lesnumériques: ```article#body div.text.clearfix``` diff --git a/docs/en/users/06_Mobile_access.md b/docs/en/users/06_Mobile_access.md index e1a23c8ba..3472172b0 100644 --- a/docs/en/users/06_Mobile_access.md +++ b/docs/en/users/06_Mobile_access.md @@ -1 +1,51 @@ -**TODO** +This page assumes you have completed the [server setup](../admins/02_Installation.md). + +# Enable the API in FreshRSS + +1. Under the section “Authentication”, enable the option “Allow API access (required for mobile apps)”. +2. Under the section “Profile”, fill-in the field “API password (e.g., for mobile apps)”. + * Every user must define an API password. + * The reason for an API-specific password is that it may be used in less safe situations than the main password, and does not grant access to as many things. + + +# Testing + +3. Under the section “Profile”, click on the link like `https://rss.example.net/api/` next to the field “API password”. +4. Click on first link “Check full server configuration”: + * If you get *PASS* then you are done, all is good: you may proceed to step 6. + * If you get *Bad Request!* or *Not Found*, then your server probably does not accept slashes `/` that are escaped `%2F`. Proceed to step 5. + * If you get any other error message, proceed to step 5. + + +# Fix server configuration + +5. Click on the second link “Check partial server configuration (without `%2F` support)”: + * If you get `PASS`, then the problem is indeed that your server does not accept slashes `/` that are escaped `%2F`. + * With Apache, remember the directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) + * Or use a client that does not escape slashes (such as EasyRSS), in which case proceed to step 6. + * If you get *Service Unavailable!*, then check from step 1 again. + * With __Apache__: + * If you get *FAIL getallheaders!*, the combination of your PHP version and your Web server does not provide access to [`getallheaders`](http://php.net/getallheaders) + * Update to PHP 5.4+, or use PHP as module instead of CGI. Otherwise turn on Apache `mod_rewrite`: + * Allow [`FileInfo` in `.htaccess`](http://httpd.apache.org/docs/trunk/mod/core.html#allowoverride): see the [server setup](../admins/02_Installation.md) again. + * Enable [`mod_rewrite`](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html): + * With Debian / Ubuntu: `sudo a2enmod rewrite` + * With __nginx__: + * If you get *Bad Request!*, check your server `PATH_INFO` configuration. + * If you get *File not found!*, check your server `fastcgi_split_path_info`. + * If you get *FAIL 64-bit or GMP extension!*, then your PHP version does not pass the requirement of being 64-bit and/or have PHP [GMP](http://php.net/gmp) extension. + * The easiest is to add the GMP extension. On Debian / Ubuntu: `sudo apt install php-gmp` + * Update and try again from step 3. + + +# Compatible clients + +6. On the same FreshRSS API page, note the adress given under “Your API address”, like `https://freshrss.example.net/api/greader.php` + * You will type it in a client, together with your FreshRSS username, and the corresponding special API password. + +7. Pick a client supporting a Google Reader-like API. Selection: + * Android + * [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) with [News+ Google Reader extension](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus.extension.google_reader) (Closed source) + * [EasyRSS](https://github.com/Alkarex/EasyRSS) (Open source, [F-Droid](https://f-droid.org/packages/org.freshrss.easyrss/)) + * Linux + * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Open source) diff --git a/docs/fr/developers/03_Backend/05_Extensions.md b/docs/fr/developers/03_Backend/05_Extensions.md index a3dc5ad20..f844accd1 100644 --- a/docs/fr/developers/03_Backend/05_Extensions.md +++ b/docs/fr/developers/03_Backend/05_Extensions.md @@ -277,7 +277,7 @@ Il est possible aussi que vous ayez besoin de fichiers ou sous-répertoires addi - `configure.phtml` est le fichier contenant le formulaire permettant de paramétrer votre extension ; - Un répertoire `static/` contenant fichiers CSS et JavaScript dont vous aurez besoin pour votre extension. Notez que si vous devez écrire beaucoup de CSS il est peut-être plus intéressant d'écrire un thème complet (mais ce n'est pas le sujet de cette fiche technique) ; -- Un répertoire `controllers` contenant des contrôleurs additionnels ; +- Un répertoire `Controllers` contenant des contrôleurs additionnels ; - Un répertoire `i18n` contenant des traductions supplémentaires ; - Des répertoires `layout` et `views` permettant de définir de nouvelles vues ou d'écraser les vues actuelles. @@ -332,4 +332,4 @@ TODO : ### Écrire le fichier configure.phtml -TODO +Lorsque vous voulez ajouter de la configuration à votre extension ou afficher ses informations, vous devez créer le fichier `configure.phtml`. diff --git a/docs/fr/users/01_Installation.md b/docs/fr/users/01_Installation.md index 765cb9481..dd1bacd00 100644 --- a/docs/fr/users/01_Installation.md +++ b/docs/fr/users/01_Installation.md @@ -1,6 +1,6 @@ # Les pré-requis sur le serveur -FreshRSS est un logiciel développé en PHP reposant sur le modèle client - serveur. C'est-à-dire qu'il vous faudra un serveur web pour en profiter. Ensuite, FreshRSS ne demande pas une configuration très fournie et peut donc, en théorie, tourner sur la plupart des serveurs mutualisés. +FreshRSS est un logiciel développé en PHP reposant sur le modèle client - serveur. C’est-à-dire qu’il vous faudra un serveur web pour en profiter. Ensuite, FreshRSS ne demande pas une configuration très fournie et peut donc, en théorie, tourner sur la plupart des serveurs mutualisés. Il est toutefois de votre responsabilité de vérifier que votre hébergement permettra de faire tourner FreshRSS avant de nous taper dessus. Dans le cas où les informations listées ci-dessous ne seraient pas à jour, vous pourrez. @@ -10,7 +10,7 @@ Il est toutefois de votre responsabilité de vérifier que votre hébergement pe | PHP | **PHP 5.5+** | PHP 5.3.8+ | | Modules PHP | Requis : libxml, cURL, PDO_MySQL, PCRE et ctype \\ Requis (32 bits seulement) : GMP \\ Recommandé : JSON, Zlib, mbstring et iconv, ZipArchive | | | Base de données | **MySQL 5.0.3+** | SQLite 3.7.4+ | - | Navigateur | **Firefox** | Chrome, Opera, Safari or IE 9+ | + | Navigateur | **Firefox** | Chrome, Opera, Safari, or IE 11+ | ## Note importante @@ -24,63 +24,113 @@ FreshRSS possède trois versions différentes (nous parlons de branches) qui sor [Téléchargement](https://github.com/FreshRSS/FreshRSS/archive/master.zip) -Cette version sort lorsqu'on considère qu'on a répondu à nos objectifs en terme de nouvelles fonctionnalités. Deux versions peuvent ainsi sortir de façon très rapprochée si les développeurs travaillent bien. En pratique, comme nous nous fixons de nombreux objectifs et que nous travaillons sur notre temps libre, les versions sont souvent assez espacées (plusieurs mois). Son avantage est que le code est particulièrement stable et vous ne devriez pas faire face à de méchants bugs. +Cette version sort lorsqu’on considère qu’on a répondu à nos objectifs en terme de nouvelles fonctionnalités. Deux versions peuvent ainsi sortir de façon très rapprochée si les développeurs travaillent bien. En pratique, comme nous nous fixons de nombreux objectifs et que nous travaillons sur notre temps libre, les versions sont souvent assez espacées (plusieurs mois). Son avantage est que le code est particulièrement stable et vous ne devriez pas faire face à de méchants bugs. ## La version de développement [Téléchargement](https://github.com/FreshRSS/FreshRSS/archive/dev.zip) -Comme son nom l'indique, il s'agit de la version sur laquelle les développeurs travaillent. **Elle est donc totalement instable !** Si vous souhaitez recevoir les améliorations au jour le jour, vous pouvez l'utiliser, mais attention à bien suivre les évolutions sur Github (via [le flux RSS de la branche](https://github.com/FreshRSS/FreshRSS/commits/dev.atom) par exemple). On raconte que les développeurs principaux l'utilisent quotidiennement sans avoir de soucis. Sans doute savent-ils ce qu'ils font… +Comme son nom l’indique, il s’agit de la version sur laquelle les développeurs travaillent. **Elle est donc instable !** Si vous souhaitez recevoir les améliorations au jour le jour, vous pouvez l’utiliser, mais attention à bien suivre les évolutions sur Github (via [le flux RSS de la branche](https://github.com/FreshRSS/FreshRSS/commits/dev.atom) par exemple). On raconte que les développeurs principaux l’utilisent quotidiennement sans avoir de soucis. Sans doute savent-ils ce qu’ils font… # Installation sur Apache -**TODO** +``` +<VirtualHost *:80> + DocumentRoot /var/www/html/ + + #Site par défaut... + + ErrorLog ${APACHE_LOG_DIR}/error.default.log + CustomLog ${APACHE_LOG_DIR}/access.default.log vhost_combined +</VirtualHost> + +<VirtualHost *:80> + ServerName rss.example.net + DocumentRoot /path/to/FreshRSS/p/ + + <Directory /path/to/FreshRSS/p> + AllowOverride AuthConfig FileInfo Indexes Limit + Require all granted + </Directory> + + ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log + CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined -Cette partie n'a pas encore été écrite. Néanmoins, comme il s'agit d'une bête application PHP, cela ne pose généralement pas de soucis à installer :) + AllowEncodedSlashes On +</VirtualHost> + +<IfModule mod_ssl.c> + <VirtualHost *:443> + ServerName rss.example.net + DocumentRoot /path/to/FreshRSS/p/ + + <Directory /path/to/FreshRSS/p> + AllowOverride AuthConfig FileInfo Indexes Limit + Require all granted + </Directory> + + ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log + CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined + + <IfModule mod_http2.c> + Protocols h2 http/1.1 + </IfModule> + + # Pour l’API + AllowEncodedSlashes On + + SSLEngine on + SSLCompression off + SSLCertificateFile /path/to/server.crt + SSLCertificateKeyFile /path/to/server.key + # Additional SSL configuration, e.g. with LetsEncrypt + </VirtualHost> +</IfModule> +``` # Installation sur Nginx -Voici un fichier de configuration pour nginx. Il couvre la configuration pour http, https et php. +Voici un fichier de configuration pour nginx. Il couvre la configuration pour HTTP, HTTPS, et PHP. -_Vous pourrez trouver d'autres fichiers de configuration plus simples mais ces derniers ne seront peut-être pas compatibles avec l'API FreshRSS._ +_Vous pourrez trouver d’autres fichiers de configuration plus simples mais ces derniers ne seront peut-être pas compatibles avec l’API FreshRSS._ ``` server { - listen 80; # http sur le port 80 - listen 443 ssl; # https sur le port 443 - - # configuration https - ssl on; - ssl_certificate /etc/nginx/server.crt; - ssl_certificate_key /etc/nginx/server.key; - - # l'url ou les urls de votre serveur - server_name example.com rss.example.com; - - # le répertoire où se trouve le dossier p de FreshRSS - root /srv/FreshRSS/p/; - - index index.php index.html index.htm; - - # les fichiers de log nginx - access_log /var/log/nginx/rss.access.log; - error_log /var/log/nginx/rss.error.log; - - # gestion des fichiers php - # il est nécessaire d'utiliser cette expression régulière pour le bon fonctionnement de l'API - location ~ ^.+?\.php(/.*)?$ { - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_split_path_info ^(.+\.php)(/.*)$; - # Par défaut la variable PATH_INFO n'est pas définie sous PHP-FPM - # or l'API FreshRSS greader.php en a besoin. Si vous avez un "Bad Request", vérifiez bien cette dernière ! - fastcgi_param PATH_INFO $fastcgi_path_info; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } - - location / { - try_files $uri $uri/ index.php; - } + listen 80; + listen 443 ssl; + + # configuration https + ssl on; + ssl_certificate /etc/nginx/server.crt; + ssl_certificate_key /etc/nginx/server.key; + + # l’URL ou les URLs de votre serveur + server_name rss.example.net; + + # le répertoire où se trouve le dossier p de FreshRSS + root /srv/FreshRSS/p/; + + index index.php index.html index.htm; + + # les fichiers de log nginx + access_log /var/log/nginx/rss.access.log; + error_log /var/log/nginx/rss.error.log; + + # gestion des fichiers php + # il est nécessaire d’utiliser cette expression régulière pour le bon fonctionnement de l’API + location ~ ^.+?\.php(/.*)?$ { + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + # Par défaut la variable PATH_INFO n’est pas définie sous PHP-FPM + # or l’API FreshRSS greader.php en a besoin. Si vous avez un “Bad Request”, vérifiez bien cette dernière ! + fastcgi_param PATH_INFO $fastcgi_path_info; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + location / { + try_files $uri $uri/ index.php; + } } ``` diff --git a/docs/fr/users/06_Mobile_access.md b/docs/fr/users/06_Mobile_access.md index e1a23c8ba..185c94098 100644 --- a/docs/fr/users/06_Mobile_access.md +++ b/docs/fr/users/06_Mobile_access.md @@ -1 +1,49 @@ -**TODO** +Cette page suppose que vous avez fini [l’installation du serveur](01_Installation.md). + +# Activer l’API dans FreshRSS + +1. Dans la section “Authentification”, cocher l’option “Autoriser l’accès par API (nécessaire pour les applis mobiles)”. +2. Dans la section “Profil”, remplir le champ “Mot de passe API (ex. : pour applis mobiles)”. + * Chaque utilisateur doit choisir son mot de passe API. + * La raison d’être d’un mot de passe API différent du mot de passe principal est que le mot de passe API est potentiellement utilisé de manière moins sûre, mais il permet aussi moins de choses. + + +# Tester + +3. Dans la section “Profil”, cliquer sur le lien de la forme `https://rss.example.net/api/` à côté du champ “Mot de passe API”. +4. Cliquer sur le premier lien “Check full server configuration”: + * Si vous obtenez `PASS`, tout est bon : passer à l’étape 6. + * Si vous obtenez *Bad Request!* ou *Not Found*, alors votre serveur ne semble pas accepter les slashs `/` qui sont encodés `%2F`. Passer à l’étape 5. + * Si vous obtenez un autre message d’erreur, passer à l’étape 5. + + +# Débogger la configuration du serveur + +5. Cliquer sur le second lien “Check partial server configuration (without `%2F` support)”: + * Si vous obtenez `PASS`, alors le problème est bien que votre serveur n’accepte pas les slashs `/` qui sont encodés `%2F`. + * Avec Apache, vérifiez la directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes) + * Ou utilisez un client qui n’encode pas les slashs (comme EasyRSS), auquel cas passer à l’étape 6. + * Si vous obtenez *Service Unavailable!*, retourner à l’étape 6. + * Avec __Apache__: + * Si vous obtenez *FAIL getallheaders!*, alors la combinaison de votre version de PHP et de votre serveur Web ne permet pas l’accès à [`getallheaders`](http://php.net/getallheaders) + * Utilisez au moins PHP 5.4+, ou utilisez PHP en tant que module plutôt que CGI. Sinon, activer Apache `mod_rewrite` : + * Autoriser [`FileInfo` dans `.htaccess`](http://httpd.apache.org/docs/trunk/mod/core.html#allowoverride) : revoir [l’installation du serveur](01_Installation.md). + * Activer [`mod_rewrite`](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html) : + * Sur Debian / Ubuntu : `sudo a2enmod rewrite` + * Avec __nginx__: + * Si vous obtenez *Bad Request!*, vérifier la configuration `PATH_INFO` de votre serveur. + * Si vous obtenez *File not found!*, vérifier la configuration `fastcgi_split_path_info` de votre serveur. + * Si vous obtenez *FAIL 64-bit or GMP extension!*, alors votre installation PHP soit n’est pas en 64 bit, soit n’a pas l’extension PHP [GMP](http://php.net/gmp) activée. + * Le plus simple est d’activer l’extension GMP. Sur Debian / Ubuntu : `sudo apt install php-gmp` + * Mettre à jour et retourner à l’étape 3. + + +# Clients compatibles + +Tout client supportant une API de type Google Reader. Sélection : + +* Android + * [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) avec [News+ Google Reader extension](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus.extension.google_reader) (Propriétaire) + * [EasyRSS](https://github.com/Alkarex/EasyRSS) (Libre, F-Droid) +* Linux + * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Libre) |
